vanneto は、この質問に非常に具体的に答えてくれました。しかし、私の意見に基づくと、ここで起こることは設計上の欠陥です。そのため、この質問へのアプローチ方法に関する別のオプションを提供するために、この回答を追加します。私はこの種の解決策を見ており、長期的には問題を引き起こすからです.
ケースは、ログインまたはログアウトしたテキストです。
Auth コンポーネントを使用するとします。
http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html
コントローラーから始めます。おそらく、AppController には次のようなものがあります。
public function beforeFilter() {
parent::beforeFilter();
$this->set('userIsLoggedIn', AuthComponent:: loggedIn());
$this->set('loggedInUser', AuthComponent::user());
}
これが何をするか: リクエストごとに、ログインしているユーザーをビューに送信します。これで、どのテキストを送信する必要があるかを検出する if ステートメントをコントローラーに含めることができると言えますが、実際には必要ではありません。
あなたの要素では、それもできます。
したがって、要素に次のようなものを入れます:
if($userIsLoggedIn) {
echo 'User is logged in.';
}else{
echo 'You are not logged in!';
}
一般に、この種のロジックを実装するために、もう少しヘルパーに移行します。これは、適切にスタイルされたコーディングのためのより多くのオプションを持つクラスであるためです。しかし、要素を使用するだけでも実行できます。
これで、テキストが正しくなりました。次に、ポイントに到達します: 静的テキストは要素に属していますか? いいえ、違います。したがって、それを改善するのは、次のように実装することです。
if($userIsLoggedIn) {
echo __('User is logged in');
}else{
echo __('User is not logged in');
}
そうすれば、静的テキストを .po ファイルに入れることができます。それらが何であるかわからない場合:
http://book.cakephp.org/2.0/en/core-libraries/internationalization-and-localization.html
たとえば、サイトが多言語化された場合にも、この要素を使用できるようになりました。または、ソース コードに触れずにテキスト ライターにテキストを編集させることもできます。
ご覧のとおり、これは別のアプローチですが、より明確なコードが得られると思います。コードを分離し、コントローラーがタスクを実行し、要素がタスクを実行し、ビューにハードコーディングされていないため、テキストも分離されます。
コードに関してはそれほど多くはないので、このような解決策を強くお勧めします。ヘルパーで行うこともできます。
この種のアプローチに関するいくつかの情報源:
http://en.wikipedia.org/wiki/Object-directional_programming#Decoupling
http://en.wikipedia.org/wiki/Single_responsibility_principle