【问题标题】:How to use renderSection in Codeigniter 4?如何在 Codeigniter 4 中使用 renderSection?
【发布时间】:2020-10-14 05:16:46
【问题描述】:

从 Codeigniter 4 for view layouts 的官方文档中,您可以在模板中使用 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>
...

所以我的问题是:

我能否以某种方式从我的控制器中为“侧边栏”添加我想要的数据?我想专门使用renderSection 来了解它的工作原理。

请不要为此添加解决方法。我知道我可以拥有:

$view->setVar('sidebar', view('my-view'));

然后在我的模板中:

echo $sidebar;

我问这个的主要原因是我们通常会找到解决方法,但我们忽略了如何实际使用 renderSection

有没有:

$view->setRenderSection('sidebar', 'my-view', ['data' => $data]);

我可以使用吗?我在这里遗漏了什么吗?

【问题讨论】:

  • 我无法在自动取款机上起草答案,因为我正在打电话。但几周前我制作了一个视频,解释了它是如何工作的。 youtu.be/qfYKzf4q5Ig?t=790我开始在视频的这一部分讨论视图布局。

标签: php codeigniter codeigniter-4


【解决方案1】:

花了一些时间了解该部分的工作原理后,我终于找到了渲染部分的解决方案。

解决方案不是很明显的想法。似乎没有任何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');

我也在复制完整的控制器,以防您想复制粘贴它:

<?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');
    }
}

【讨论】:

    猜你喜欢
    • 2020-05-23
    • 2021-07-15
    • 1970-01-01
    • 2022-01-27
    • 2021-10-04
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多