从我的视图中的另一个控制器渲染视图

时间:2021-04-05 22:18:24

标签: cakephp

我不知道这是否可行,我觉得这是我不应该做的事情,但我需要它,所以让我们说:

我有一个控制器“A”,这个控制器有一个函数可以做一些计算,然后有一个视图,它将渲染一个包含一些字段的 div。

好的,我不能碰那个。

但现在我还有控制器“B”,这个控制器也有一个函数和一个视图,这个视图显示了一些东西,我需要在这里显示一个 div 中的第一种情况(在已经存在的 div 中)存在)。

ps:控制器“A”上的函数需要两个参数。

在这个项目中有一些部分,人们使用 iframe 然后 .load() 在另一个视图中显示 iframe 内 A 中的内容,但我想知道我是否可以使用 cakephp 本身使用 div 来做到这一点。< /p>

蛋糕版本 2.4.9

1 个答案:

答案 0 :(得分:0)

控制器并不是要调用 Cake 中其他控制器中的函数,但是 Cake 有一些特性可以让您在视图之间共享函数。

根据您在此处暗示的内容,您可能可以将该函数粘贴到 View Cell 中:

namespace App\View\Cell;

use Cake\View\Cell;

class MyCell extends Cell
{ 
    // Pass whatever data you need to, to the Cell
    public function display($var1, $var2) 
    {
        // Your calculations previously done in Controller A, do here instead, Ex.
        $this->set('unread_count, $var1 - $var2);
    }
}

然后将任何 div 内容放入 Cell 模板中:

<!-- templates/cell/MyCell/display.php -->
<div class="notification-icon">
    You have <?= $unread_count ?> unread messages.
</div>

然后将输出放入控制器 A 和 B 的视图中,例如:

<!-- In Controller A's & B's template, render where needed, passing the data needed: -->
<?= $this->cell('MyCell', [$var1, $var2]); ?>

这只是一种选择 - 取决于您在该控制器中的具体操作,您可以将共享函数作为 Custom Finder 粘贴到表中。您可以将共享函数放在一个普通的旧 PHP Trait or Library 中。

相关问题