私は CRUD アプリケーションを持っています。私のビューには、さまざまなコントローラーからのアクションへのリンクがあります。
<?php echo $this->Html->link(__('List Docs'), array('controller' => 'docs', 'action' => 'index')); ?>
<?php echo $this->Html->link(__('Add Doc'), array('controller' => 'docs', 'action' => 'add')); ?>
<?php echo $this->Html->link(__('List Images'), array('controller' => 'images', 'action' => 'index')); ?>
<?php echo $this->Html->link(__('Add Image'), array('controller' => 'images', 'action' => 'add')); ?>
//etc..
これで、レンダリングされる各ビューからのアクション リンクを動的に入力したいサイドバーを備えた default.ctp レイアウトもあります。アクションをコントローラーからそれぞれのモデルに移動し、コントローラー内の beforeRender() コールバックで変数を設定できることはわかっていますが、アクションをコントローラー内に保持し、代わりにビュー内に配列を設定して、それを default.ctp レイアウトに渡します。これが私がこれまでに持っているものです:
Docs/index.ctp :
$links_array = array(
'list_docs' => array('controller' => 'docs', 'action' => 'index'),
'add_doc' => array('controller' => 'docs', 'action' => 'add'),
'list_images' => array('controller' => 'images', 'action' => 'index'),
'add_image' => array('controller' => 'images', 'action' => 'add')
);
$this->set('links', $links_array);
レイアウト/default.ctp :
print_r($links);
これはNotice (8): Undefined variable: links [APP\View\Layouts\default.ctp, line 93]
、レイアウトがビューの前にレンダリングされているためだと思います。
アクションをモデルに移動せずにこれを行う最善の方法は何ですか?