1

我正在开发一个 CakePHP 1.2 应用程序,我无法控制 /app 目录并将我的视图文件夹重新定位到 /path/to/mycomponent/views 并且可以通过设置控制器的默认视图路径来呈现我的视图

var $viewPath = "mycomponent/views";

我在 /path/to/mycomponent/views/layouts 下有一些布局(包括 basic.ctp)

有没有办法在特定布局中呈现我的视图?

从我的控制器调用它会给我一个找不到页面的错误:

function index()
    {
        $this->autoLayout = true;
        $this->pageTitle = 'Browse items';
        $this->render("browse", "basic");
        // also tried: $this->render("browse", "/path/to/mycomponent/views/layouts/basic.ctp");
    }
4

2 回答 2

1

最后通过向应用程序配置的 viewPaths 数组添加路径来使其工作。此代码进入您的控制器构造函数或覆盖 beforeFilter 方法中:

$config = Configure::getInstance();
$config->viewPaths[] = " /path/to/mycomponent/views/";

现在我可以指定以下内容:

$this->layout = 'basic';

我的控制器的视图呈现在basic.ctp布局中。

于 2012-06-04T16:29:17.980 回答
0

仅供参考。我相信 cakePhp 2.x 应该这样做。

公共函数 beforeRender() { parent::beforeRender();
$this->layout = 'mylayout'; }

这将转到路径:/app/View/Layouts/mylayout.ctp

笔记:

如果要修改某些控制器的视图路径,请在控制器类声明之前添加:

App::build(array('View' => '/Folder/'));

类 ExampleController 扩展 AppController{...}

这会将示例控制器的所有渲染视图的路径设置为/app/Views/Folder/

所以完整的例子是:

App::build(array('View' => '/Folder/'));

类 ExampleController 扩展 AppController{

public function beforeRender() {
    parent::beforeRender();        
    $this->layout = 'mylayout';
}  


public function index() {
    $this->render('Home');
    //This will load view: "/app/Views/Folder/Home.ctp"
    //From layout: "/app/Views/Layouts/mylayout.ctp"
} 

}

于 2015-02-28T09:54:01.520 回答