剪辑是您最好的选择,正如@jfrej 通过将您指向讨论剪辑的论坛主题所建议的那样。
在常规情况下,每个控制器都关联了一个放置其所有视图的文件夹,并且您希望在布局末尾包含一些 PHP+Javascript 内容(这是引用它们的方式,而不是模板)这对于控制器中的所有操作都是通用的。
我会覆盖CController::afterRender()
方法来为您的剪辑捕获内容;让我们打电话给你的剪辑controller_content
:
afterRender(string $view, string &$output)
$this->beginClip('controller_content');
// output here any content you want to capture into your clip
// e.g. renderPartial, echo, etc.
...
$this->endClip();
parent::afterRender($view, $output);
}
然后,在您的布局中,您将在始终存在的所有内容之后渲染您的剪辑,例如:
// register your CSSs
// output $content variable
// register Javascript
...
<?= $this->clips['controller_content'] ?>
当然,您可以通过多种方式生成剪辑内容。在这里,我覆盖了该CController::afterRender()
方法,但您也可以使用过滤器、行为或任何其他最适合您需求的方法。