我不知道这是否可行,我觉得这是我不应该做的事情,但我需要它,所以让我们说:
我有一个控制器“A”,这个控制器有一个函数可以做一些计算,然后有一个视图,它将渲染一个包含一些字段的 div。
好的,我不能碰那个。
但现在我还有控制器“B”,这个控制器也有一个函数和一个视图,这个视图显示了一些东西,我需要在这里显示一个 div 中的第一种情况(在已经存在的 div 中)存在)。
ps:控制器“A”上的函数需要两个参数。
在这个项目中有一些部分,人们使用 iframe 然后 .load() 在另一个视图中显示 iframe 内 A 中的内容,但我想知道我是否可以使用 cakephp 本身使用 div 来做到这一点。< /p>
蛋糕版本 2.4.9
答案 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 中。