如何在 Codeigniter 4 中使用 renderSection?
How to use renderSection in Codeigniter 4?
在 view layouts 的 Codeigniter 4 官方文档中,有一个函数 renderSection
可以在您的模板中使用。
但主要问题是我无法弄清楚它是如何工作的。请记住,我不想解决这个问题,我真的需要知道 renderSection
是如何工作的以及我缺少什么。
更准确地说:
在我的 Controller
我有这个代码:
// TestController.php
...
// My method
...
$view = \Config\Services::renderer();
$view->setVar('output', $output);
return $view->render('my-main-view');
...
我的观点是这样的:
// my-main-view.php
...
<div class="main-container">
<main>
<?php echo $output; ?>
</main>
<?php echo $this->renderSection('sidebar'); ?>
</div>
...
所以我的问题是:
我能以某种方式从我的控制器添加我想要的 'sidebar' 数据吗?我想专门使用 renderSection
来了解它是如何工作的。
请不要为此添加解决方法。我知道我可以拥有:
$view->setVar('sidebar', view('my-view'));
然后在我的模板中:
echo $sidebar;
我问这个问题的主要原因是我们通常会找到解决方法,而我们忽略了如何实际使用 renderSection
有没有:
$view->setRenderSection('sidebar', 'my-view', ['data' => $data]);
我可以用吗?我在这里遗漏了什么吗?
在花了一些时间了解该部分的工作原理后,我终于找到了渲染部分的解决方案。
解决方案不是很明显的想法。似乎没有 setRenderSection
所以我确实为我的控制器创建了自己的。更具体地说,我们有之前的例子:
$view = \Config\Services::renderer();
$view->setVar('output', $output);
return $view->render('my-main-view');
所以我在控制器中添加了一个名为 _setRenderSection
的函数:
private function _setRenderSection($viewRenderer, $sectionName , $viewName, $data = []) {
$viewRenderer->section($sectionName);
echo view($viewName, $data);
$viewRenderer->endSection($sectionName);
}
所以我的最终方法将如下所示:
$view = \Config\Services::renderer();
$view->setVar('output', $output);
$this->_setRenderSection($view, 'sidebar' ,'my-view', ['data' => '123']);
return $view->render('my-main-view');
我还复制了完整的 Controller,以防您想复制粘贴它:
<?php namespace App\Controllers;
class Webpages extends BaseController
{
private function _setRenderSection($viewRenderer, $sectionName , $viewName, $data = []) {
$viewRenderer->section($sectionName);
echo view($viewName, $data);
$viewRenderer->endSection($sectionName);
}
public function about()
{
$view = \Config\Services::renderer();
$view->setVar('output', 'Hello World!');
$this->_setRenderSection($view, 'sidebar' ,'my-view', ['data' => '123']);
return $view->render('my-main-view');
}
}
在 view layouts 的 Codeigniter 4 官方文档中,有一个函数 renderSection
可以在您的模板中使用。
但主要问题是我无法弄清楚它是如何工作的。请记住,我不想解决这个问题,我真的需要知道 renderSection
是如何工作的以及我缺少什么。
更准确地说:
在我的 Controller
我有这个代码:
// TestController.php
...
// My method
...
$view = \Config\Services::renderer();
$view->setVar('output', $output);
return $view->render('my-main-view');
...
我的观点是这样的:
// my-main-view.php
...
<div class="main-container">
<main>
<?php echo $output; ?>
</main>
<?php echo $this->renderSection('sidebar'); ?>
</div>
...
所以我的问题是:
我能以某种方式从我的控制器添加我想要的 'sidebar' 数据吗?我想专门使用 renderSection
来了解它是如何工作的。
请不要为此添加解决方法。我知道我可以拥有:
$view->setVar('sidebar', view('my-view'));
然后在我的模板中:
echo $sidebar;
我问这个问题的主要原因是我们通常会找到解决方法,而我们忽略了如何实际使用 renderSection
有没有:
$view->setRenderSection('sidebar', 'my-view', ['data' => $data]);
我可以用吗?我在这里遗漏了什么吗?
在花了一些时间了解该部分的工作原理后,我终于找到了渲染部分的解决方案。
解决方案不是很明显的想法。似乎没有 setRenderSection
所以我确实为我的控制器创建了自己的。更具体地说,我们有之前的例子:
$view = \Config\Services::renderer();
$view->setVar('output', $output);
return $view->render('my-main-view');
所以我在控制器中添加了一个名为 _setRenderSection
的函数:
private function _setRenderSection($viewRenderer, $sectionName , $viewName, $data = []) {
$viewRenderer->section($sectionName);
echo view($viewName, $data);
$viewRenderer->endSection($sectionName);
}
所以我的最终方法将如下所示:
$view = \Config\Services::renderer();
$view->setVar('output', $output);
$this->_setRenderSection($view, 'sidebar' ,'my-view', ['data' => '123']);
return $view->render('my-main-view');
我还复制了完整的 Controller,以防您想复制粘贴它:
<?php namespace App\Controllers;
class Webpages extends BaseController
{
private function _setRenderSection($viewRenderer, $sectionName , $viewName, $data = []) {
$viewRenderer->section($sectionName);
echo view($viewName, $data);
$viewRenderer->endSection($sectionName);
}
public function about()
{
$view = \Config\Services::renderer();
$view->setVar('output', 'Hello World!');
$this->_setRenderSection($view, 'sidebar' ,'my-view', ['data' => '123']);
return $view->render('my-main-view');
}
}