31

有没有办法将控制器渲染到不同的视图然后正常?我正在尝试将一些数据从控制器传递到非默认视图。意思是我的控制器被称为:

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 文件?

我已经尝试了从这里开始的一切,但没有运气。

4

7 回答 7

62

正确的方式:

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

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

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

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

于 2012-07-30T05:10:02.130 回答
45

我宁愿使用:

$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');
于 2014-02-08T15:17:26.893 回答
11

尝试放置不带 .ctp 扩展名的视图名称。

$this->render('file');
于 2012-07-29T17:39:44.677 回答
3
class StocksRealtimeController extends AppController
{
   var $uses = 'StockRealtime';

   function index( )
   {
     $this->layout     = NULL;
     $this->autoRender = false;

     $this->set('stocksRT', $this->StockRealtime->find('all'));

     return $this -> render('/TestView/index');
     /*
        $this -> render('/TestView/index');
        Here 'TestView' must be a Folder named same as "public $name" variable value        
        in Controller and an "index.ctp" must be situated under TestView Folder.
       'index'
     */
   }
}

试一试,返回 'KEYWORD' 必须存在才能成功呈现视图页面。很抱歉第二个问题,因为我没明白。根据 CakePHP,使用 $this -> set() 设置的变量 [stocksTR] 也将在手动渲染视图页面 ['index.ctp'] 中可用。

于 2014-02-04T17:48:18.927 回答
0
class StocksRealtimeController extends AppController {
var $uses               = 'StockRealtime';

    function index(){

       $this->layout = NULL;
       $this->autoRender = false;

       $this->set('stocksRT', $this->StockRealtime->find('all'));

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

    }
}
于 2012-07-30T04:44:04.517 回答
0
 $this->view  = '/TestView/index';
 $this->set('stocksRT', $this->StockRealtime->find('all'));
于 2015-05-06T13:34:17.777 回答
0
public function admin_index() { 

    $this->layout = 'admin/table';

    $action = '/Vendors';

    $this->Prg->commonProcess('Vendor');

    $this->paginate = array('conditions' => array($this->Vendor->parseCriteria($this->passedArgs)), 'order' => 'Vendor.created_on DESC', 'limit' => 15);

    $this->set('vendor', $this->paginate('Vendor'));

    $this->render('/vendors/admin_items');
}
于 2016-01-07T06:43:08.690 回答