gpt4 book ai didi

php - CakePHP 在 View 中设置变量以用于布局

转载 作者:行者123 更新时间:2023-12-01 22:40:01 24 4
gpt4 key购买 nike

我有一个 CRUD 应用程序,在我看来,有指向来自各种 Controller 的操作的链接,例如

<?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 布局,我想用正在呈现的每个 View 的操作链接动态填充它。我知道我可以将 Action 从我的 Controller 移动到它们各自的模型并在 Controller 内的 beforeRender() 回调中设置变量,但是我想将我的 Action 保留在 Controller 内,而不是在 View 内设置一个数组并将其传递给 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);

Layouts/default.ctp:

print_r($links);

这将返回 Notice (8): Undefined variable: links [APP\View\Layouts\default.ctp, line 93] 我猜是因为布局在 View 之前呈现。

在不将操作移动到他们的模型的情况下执行此操作的最佳方法是什么?

最佳答案

$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);

...应该在 Controller 中。

布局将看到 View 中可用的任何变量。所以 $links 将在布局中可见。 (如果你真的必须从 View 而不是 Controller 设置变量,你不需要在 View 中使用 $this->set() ,只需使用 $links = ...).

关于php - CakePHP 在 View 中设置变量以用于布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16247980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com