将控制器渲染到 CakePHP 中的其他视图

2022-08-30 14:04:02

有没有办法将控制器呈现为与正常情况不同的视图?我正在尝试将一些数据从控制器传递到非默认视图。这意味着我的控制器被称为:

class StocksRealtimeController extends AppController {
    var $uses               = 'StockRealtime';
    function index(){
        $action = '/TestView';
        $this->set('stocksRT', $this->StockRealtime->find('all'));
        //$this -> viewPath = 'Pages';
        $this -> render('/TestView/index');
    }
}

...和“我的视图”位于 views->TestView->index.ctp 中

我的另一个问题是,如何将该值传递给PHP而不是CakePHP框架之外的ctp文件?

我在这里尝试了一切,但没有运气。


答案 1

正确的方法:

$this -> render('TestView/index');

正如上面的答案所提到的,您可以使用将变量传递给视图。$this -> set

但是,如果这不能给你你想要的。我猜你还希望操作显示另一个布局(非默认布局)。您可以尝试执行(布局位于布局文件夹中,默认为 default.ctp)。$this -> layout = 'layoutname';

注意:CakePHP的控制器不是为了将数据传递到非视图文件(如.php) 而设计的。CakePHP的观点应该以..ctp


答案 2

我宁愿使用:

$this->view = 'file';

因为您之后的任何一个都不会到达您的视野。$this->set('var', $val)$this->render('file')

在 CakePHP 3.x 中使用:

$this->viewBuilder()->template('file');

在 CakePHP 3.7 中已弃用。请改用这个(正如Kuldeep Choudhary在评论中建议的那样)

ViewBuilder::setTemplate('file');

推荐