有没有办法将控制器渲染到不同的视图然后正常?我正在尝试将一些数据从控制器传递到非默认视图。意思是我的控制器被调用:
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');
}
}
...我的观点在视图中 - > TestView-> index.ctp
我的另一个问题是,如何将该值传递给PHP而不是CakePHP框架之外的ctp文件?
我尝试了here的所有内容而没有运气。
答案 0 :(得分:54)
正确的方式:
$this -> render('TestView/index');
如上所述,您可以使用$this -> set
将变量传递给View。
然而,如果那不能给你你想要的东西。我猜你也希望动作显示另一个布局(非默认布局)。您可以尝试$this -> layout = 'layoutname';
(布局文件夹中的布局,默认为default.ctp)。
注意: CakePHP的控制器不是为了将数据传递给非视图文件(如.php)而设计的。 CakePHP的观点应该以{{1}}结尾。
答案 1 :(得分:41)
我宁愿使用:
$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');
答案 2 :(得分:11)
尝试放置没有.ctp扩展名的视图名称。
$this->render('file');
答案 3 :(得分: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,使用设置的变量[stocksTR] $ this - > set(),也可以在手动渲染视图页面['index.ctp']中使用。
答案 4 :(得分: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`);
}
}
答案 5 :(得分:0)
$this->view = '/TestView/index';
$this->set('stocksRT', $this->StockRealtime->find('all'));
答案 6 :(得分: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');
}