我创建了一个应用程序,允许管理员将滑块内容保存到数据库,现在我想在主页上包含滑块。我有一个带滑块功能的Slides控制器,它只是将幻灯片内容发送到滑块视图。
这是控制器功能:
public function slider()
{
$slides = $this->Slides->find('all');
$this->set('slides', $slides);
$this->set('_serialize', ['slides']);
}
该功能的视图仅包含以下内容:
<?= $this->element('slider'); ?>
然后我创建了一个名为slider的元素文件并在那里处理幻灯片。当我转到url / slides / slider滑块时,滑块正在工作,但是当我转到根页面或主页时,滑块是空的。它似乎并没有将$ slides变量保留在元素中。
在主页上:
<?= $this->element('slider'); ?> // then the rest of the home page follows this.
那么如何保留变量或使其变为可以在主页上显示滑块视图呢?
答案 0 :(得分:3)
您的最佳做法是使用Cells:
查看单元格是可以调用视图逻辑的小型迷你控制器 渲染出模板。它们提供轻量级模块化替代品 requestAction()。
cd bin
从控制台cake bake cell Slider
src/View/Cell/SliderCell.php
。如下
public function display()
{
$this->loadModel('Slides');
$slides= $this->Slides->find('all');
$this->set('slides', $slides);
}
src/Template/Cell/Slides/display.ctp
,然后在tepmlate中使用$slides
。<?= $this->cell('Slider') ?>
答案 1 :(得分:1)
变量不是从Controller发送到元素,而是从视图发送。
您可以做的是在控制器中设置变量,如下所示:
$this->set('myvariable','any value');
而且,根据cakephp 3文档,在视图中你可以传递这样的参数:
echo $this->element('helpbox', [
"varToElement" => $myvariable
]);
来源:https://book.cakephp.org/3.0/en/views.html#passing-variables-into-an-element