【问题标题】:CakePHP This->render does not load controllerCakePHP This->render 不加载控制器
【发布时间】:2012-12-04 23:30:36
【问题描述】:

我有几个在很多地方使用的视图。视图是一样的,但控制器不一样,所以我将 .ctp 文件放在 Elements 目录中,并在不同的控制器中使用以下代码。

$this->render('/Elements/overview'); 

但是,我还有一些 php 代码需要在每次视图加载时执行。 所以我想在 Contollers 目录中创建一个控制器,命名为 Elements 目录中的视图 (overviewController.php),但不幸的是,该控制器中的代码没有执行。

有没有办法做到这一点,还是我这样做完全错了?

编辑: 好的,根据 Dave 的建议,我将 overview.ctp 文件复制到一个名为 Global 的新目录中。将控制器重命名为 GlobalController.php,将类重命名为 GlobalController 并更改 $this->render。但是,视图仍然被加载,我用来渲染视图的控制器也被加载,但 GlobalController 没有。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    在整个视图中使用元素是不正常的。你最好使用实际的视图文件。元素是在视图中使用的更小的代码块。

    示例:

    创建一个“OverviewsController.php”(注意它是 PluralController.php)。在其中创建一个函数:

    public function overview() {
    
    }
    

    要访问该功能,请使用网址:www.yourdomain.com/overviews/overview

    它的视图文件应该在Views/Overviews/overview.ctp

    如果您打算在许多地方使用该元素,则可以将其包含在视图中。

    编辑:

    您发布的代码没有任何问题,但您不需要渲染元素 - 只需渲染一个视图:

    public function anything() {
        $this->render('/Overviews/overview');
    }
    

    【讨论】:

    • 我明白了,我将它用于普通页面。但是,这并不能解决我想要使用不同控制器多次使用的视图的问题
    • 已编辑答案以包括从不同的操作呈现视图。
    猜你喜欢
    • 2015-06-08
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2010-12-16
    相关资源
    最近更新 更多