我有一个 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 布局。这是我到目前为止所拥有的:
文档/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]
我猜这会返回,因为布局是在视图之前呈现的。
在不将动作转移到他们的模型中的情况下,最好的方法是什么?