2

我创建了一个允许管理员将滑块内容保存到数据库的应用程序,现在我想在主页上包含滑块。我有一个带有滑块功能的幻灯片控制器,它只是将幻灯片内容发送到滑块视图。

这是控制器功能:

public function slider()
{
    $slides = $this->Slides->find('all');
    $this->set('slides', $slides);
    $this->set('_serialize', ['slides']);
}

该函数的视图仅包含以下内容:

<?= $this->element('slider'); ?>

然后我创建了一个名为滑块的元素文件并在那里处理幻灯片。当我转到 url /slides/slider 时,滑块正在工作,但是当我转到根或主页时,滑块是空的。它似乎没有将 $slides 变量保留在元素中。

在主页上:

<?= $this->element('slider'); ?> // then the rest of the home page follows this.

那么如何保留或制作变量,以便我也可以在主页上拥有滑块视图?

4

2 回答 2

3

您的最佳做法是使用Cells

视图单元是可以调用视图逻辑和渲染模板的小型微型控制器。它们为 requestAction() 提供了一个轻量级的模块化替换。

  1. cd bin从控制台运行的基本应用程序目录
  2. 然后cake bake cell Slider从控制台运行
  3. src/View/Cell/SliderCell.php
  4. 编辑显示功能,

如下

public function display()
{
    $this->loadModel('Slides');
    $slides= $this->Slides->find('all');
    $this->set('slides', $slides);
}
  1. 现在转到src/Template/Cell/Slides/display.ctp,并$slides在 tepmlate 中玩。
  2. 要在任何地方渲染 Cell,只需使用以下命令:<?= $this->cell('Slider') ?>
于 2015-12-07T09:59:53.697 回答
2

变量不是从控制器发送到元素,而是从视图发送。

你可以做的是在你的控制器中设置变量,如下所示:

$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

于 2017-01-24T05:07:31.850 回答