1

/app ディレクトリを制御できない CakePHP 1.2 アプリに取り組んでおり、ビュー フォルダーを /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 がこのように行われることを信じています。

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

which would go to the path: /app/View/Layouts/mylayout.ctp

Note:

If you want to modify the view paths for some controller, add before the controller class declaration:

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

class ExampleController extends AppController{...}

which will set the path for all rendered view for Example controller to /app/Views/Folder/

so the full example would be:

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

}

于 2015-02-28T09:54:01.520 に答える