如何从控制器向CakePHP 3.x中的元素发送变量,并在不同视图中使用元素时保留变量?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (58)

我创建了一个应用程序,允许管理员将滑块内容保存到数据库,现在我想在主页上包含滑块。我有一个带滑块功能的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.

那么如何保留变量或使其变为可以在主页上显示滑块视图呢?

提问于
用户回答回答于

您的最佳做法是使用单元格

View单元格是小型迷你控制器,可以调用视图逻辑和渲染模板。它们为requestAction()提供了轻量级的模块化替代品。

  1. 从基础App dir 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') ?>
用户回答回答于

变量不是从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

扫码关注云+社区

领取腾讯云代金券