【问题标题】:CakePHP - Render a view that is actually plugin's view from ComponentCakePHP - 从组件渲染一个实际上是插件视图的视图
【发布时间】:2011-11-29 04:16:03
【问题描述】:

早安,

所以这是我第一次为 CakePHP 开发插件。这是我在组件的startUp 中所做的。

//component
function startUp(&$controller){
    //....
    if($render){
        $controller->render("return", "ajax");
    }
}

默认情况下,此渲染调用会查看 app/views/<controllers>/return.ctpapp/views/layouts/ajax

我是否可以给出一个指令来代替 app/my_plugin/views/awesome_stuffs/return.ctpapp/my_plugin/views/layout/ajax.ctp 进行渲染?

我相信Controller::render($file, $layout, $file) 中的第三个param 可以完成这项工作,但有没有更好的Cake 做事方式?

另外,这样接管控制器的渲染功能是否被认为是一种好习惯?

【问题讨论】:

    标签: cakephp cakephp-1.3


    【解决方案1】:

    一种方法是在 AJAX 调用中调用 PLUGIN 控制器/操作 URL,而不是主应用控制器/操作 URL。

    例如: 而不是:

    http://domain.com/controller/action
    

    你打电话:

    http://domain.com/my_plugin/controller/action
    


    当你这样做时,插件视图和布局会被自动调用。见:

    http://book.cakephp.org/view/1118/Plugin-Tips

    http://book.cakephp.org/view/1115/Plugin-Views

    否则,我知道的唯一方法是手动设置您提到的路径或通过以下方式在控制器范围内设置路径:

    var $viewPath = 'path/to/plugin/views/';
    var $layoutPath = 'path/to/plugin/layouts/';
    

    【讨论】:

    • $layoutPath 仅用于在控制器的视图/布局/文件夹 AFAIK 中设置子文件夹
    【解决方案2】:

    您可能想尝试将 $this->view 设置为您要渲染的插件虚线视图文件。

    【讨论】:

      【解决方案3】:

      添加到您的来源

      $controller->plugin = "pluginname";
      

      【讨论】:

      • 欢迎来到这里。您能否解释和/或引用来源说明这有帮助的原因?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      相关资源
      最近更新 更多