【问题标题】:How to send variables to an element in CakePHP 3.x from a controller and keep variables when using element in a different view?如何从控制器向 CakePHP 3.x 中的元素发送变量并在不同视图中使用元素时保留变量?
【发布时间】:2016-03-10 22:16:45
【问题描述】:

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

这是控制器功能:

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.

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

【问题讨论】:

  • 你在appcontroller中试过了吗?
  • 在首页,你是如何初始化$slides变量的?还是您希望元素以某种方式记住上一页加载的数据?
  • 我没有在主页中发送变量,我不知道该怎么做。主页是由页面控制器控制的静态视图,因此我不确定如何将幻灯片变量发送到该页面或以某种方式将数据保留在元素中。

标签: cakephp cakephp-3.0 cakephp-3.1 cakephp-3.x


【解决方案1】:

您的最佳做法是使用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 一起玩。
  2. 要在任何地方渲染单元格,只需使用这个:&lt;?= $this-&gt;cell('Slider') ?&gt;

【讨论】:

  • 很好的答案。谢谢!只是为了澄清一点,我使用的是 Windows,根据文档,如果有人在运行 Ayman Alkom 给出的命令时遇到问题,我必须使用命令 bin\cake bake cell Slider。
  • 另外,如果我还没有模型(实体和表),我需要先创建它们正确吗?
  • 是的,你也可以cd到bin目录,简单的调用'cake',cake 3会自动找到app base url
【解决方案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

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多