Zend Framework アプリケーションをモジュール ベースの構造に変換する前は、単一のレイアウトがあり、次のようにコントローラーから変数を渡すことができました。
// Controller action
$this->view->foo = 'Something';
// Layout
<?= $this->foo ?>
ただし、すべてをデフォルト モジュールに移動し、別の「管理」モジュールを作成して以来、これを機能させることができなくなりました。おそらく、「ビュー設定」をブートストラップ ファイルからコントローラ プラグインに移動したことが原因です。モジュールに合わせてレイアウトを切り替えています。私のプラグインは次のようになります。
class KW_Controller_Plugin_LayoutSelector extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$layout = Zend_Layout::getMvcInstance();
$layout->setLayout($request->getModuleName());
$view = $layout->getView();
$view->doctype('HTML5');
$view->setEncoding('UTF-8');
$view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8');
$view->headScript()->appendFile('/js/jquery-1.7.1.min.js');
switch ($request->getModuleName()) {
case 'admin':
$view->headTitle('Admin Area')->setSeparator(' - ');
$view->headLink()->appendStylesheet('/css/admin/global.css');
$view->headScript()->appendFile('/js/admin/common.js');
break;
default:
$view->headTitle('Main Site')->setSeparator(' - ');
$view->headLink()->appendStylesheet('/css/global.css');
$view->headScript()->appendFile('/js/common.js');
break;
}
}
}
ビューへのこれらすべてのメソッド呼び出しをブートストラップに戻すと、変数を再びレイアウトに渡すことができます。だから私は何かが間違った順序で起こっていると推測しています.変数をコントローラーからビューに渡した後にレイアウトが切り替えられ、それらが私のレイアウトに組み込まれていないのでしょうか? (コードを preDispatch() と postDispatch() の両方に入れるなどして、上記が実行されるポイントを変更しようとしました。)
これらの変数が含まれているレイアウトではなく、個々のビュー スクリプトでこれらの変数にアクセスできることに注意してください。
任意のポインタをいただければ幸いです。