如何从控制器向 CakePHP 3.x 中的元素发送变量,并在不同视图中使用元素时保留变量?
How to send variables to an element in CakePHP 3.x from a controller and keep variables when using element in a different view?
我创建了一个允许管理员将滑块内容保存到数据库的应用程序,现在我想在主页上包含滑块。我有一个带有滑块功能的幻灯片控制器,它只将幻灯片内容发送到滑块视图。
这是控制器函数:
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.
那么我该如何保留或创建变量,以便主页上也能显示滑块视图?
您的最佳做法是使用 Cells:
View cells are small mini-controllers that can invoke view logic and
render out templates. They provide a light-weight modular replacement
to 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
,并在模板中使用 $slides
。
- 要在任何地方渲染 Cell,只需使用这个:
<?= $this->cell('Slider') ?>
变量不是从控制器发送到元素,而是从视图发送。
您可以像这样在控制器中设置变量:
$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
我创建了一个允许管理员将滑块内容保存到数据库的应用程序,现在我想在主页上包含滑块。我有一个带有滑块功能的幻灯片控制器,它只将幻灯片内容发送到滑块视图。
这是控制器函数:
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.
那么我该如何保留或创建变量,以便主页上也能显示滑块视图?
您的最佳做法是使用 Cells:
View cells are small mini-controllers that can invoke view logic and render out templates. They provide a light-weight modular replacement to 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
,并在模板中使用$slides
。 - 要在任何地方渲染 Cell,只需使用这个:
<?= $this->cell('Slider') ?>
变量不是从控制器发送到元素,而是从视图发送。
您可以像这样在控制器中设置变量:
$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