2012-05-22 38 views
1

我正在CakePHP 1.2应用程序中工作,我无法控制/ app目录,并将我的视图文件夹重定位到/ my/path/to/mycomponent/views,并且可以呈现我的意见通过设置我的控制器的默认视图路径Relocating Cake的默认布局文件夹

var $viewPath = "mycomponent/views"; 

我在/ path一些布局(包括basic.ctp)/到/ myComponent的/视图/布局

有没有办法来渲染我里面的观点具体布局?

从我的控制器调用这给了我一个找不到网页错误:

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"); 
    } 

回答

1

终于得到它通过向应用程序配置的viewPaths阵列的路径工作。此代码放在你的控制器构造或覆盖beforeFilter梅托德:

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

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

$this->layout = 'basic'; 

而且我的控制器的观点呈现在basic.ctp布局。

0

只是为了进一步的参考。 我相信cakePhp 2.x是这样做的。

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

它会去的路径:/app/View/Layouts/mylayout.ctp

注:

如果你想修改一些控制器视图路径,在控制器类声明之前添加:

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

class ExampleController extends AppController{...}

这将设置所有路径对于实施例控制器/应用/查看/文件夹/ ndered视图

所以完整的例子将是:

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

class ExampleController extends 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" 
} 

}