在CakePHP中将控制器渲染到不同的视图
有没有一种方法可以将控制器渲染到与普通视图不同的视图?我正在尝试将一些数据从控制器传递到非默认视图。这意味着我的控制器被称为:在CakePHP中将控制器渲染到不同的视图,php,cakephp,Php,Cakephp,有没有一种方法可以将控制器渲染到与普通视图不同的视图?我正在尝试将一些数据从控制器传递到非默认视图。这意味着我的控制器被称为: class StocksRealtimeController extends AppController { var $uses = 'StockRealtime'; function index(){ $action = '/TestView'; $this->set('stocksRT
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文件
我尝试了从中的所有内容,但运气不佳。尝试将视图的名称放在不带.ctp扩展名的位置
$this->render('file');
正确的方法:
$this->render('TestView/index')代码>
如上所述,您可以使用$this->set
将变量传递给视图
然而,如果这不能满足你的需求。我猜您还希望该操作显示另一个布局(非默认布局)。您可以尝试执行$this->layout='layoutname'代码>(版面位于版面文件夹中,默认打开为default.ctp)
注意:CakePHP的控制器不是为将数据传递到非视图文件(如.php)而设计的。CakePHP的视图应该以.ctp
结尾
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'
*/
}
}
尝试一下,返回“关键字”必须在那里才能成功呈现视图页面。
对不起,第二个问题我没听懂。
根据CakePHP,变量[stocksTR]是使用
$this->set(),也将在手动渲染视图页面['index.ctp']上提供 我宁愿使用:
$this->view = 'file';
因为$this->set('var',$val)
之后的任何$this->render('file')
都不会到达您的视图
在CakePHP 3.x中,使用:
$this->viewBuilder()->template('file');
在CakePHP3.7中已弃用。
改用这个(正如Kuldeep Choudhary在评论中建议的那样)
我按照您的建议做了,但页面仍在查找testcontroller=>“错误:找不到TestViewController”。这就是我在示例中所做的。可能我迟到了。。但是,如果您设置变量“*\u for\u layout”也将在layout中可用。对于我来说,我需要在路径前面放置一个/(例如,/TestView/index
)。一个警告。在设置viewVars之前调用$this->render()
将使它们在视图中不可用。render()
方法将停止控制器的执行,并且该行之后的任何代码都将被忽略。改为设置视图
属性是一个更好的主意,应该接受@Sabin Neagu的答案。截止日期,如果要从/app/view
中呈现视图,则需要一个前导的/
,如果要呈现的视图来自插件,则不需要前导的/
。链接到适当的文档。难怪!我很确定我设置的变量是正确的,但是视图弹出一个提示,没有设置“it”。谢谢你的提示!这应该是建议的答案;它最符合蛋糕模式。同意,在我看来更灵活。这应该是公认的答案。现在在CakePHP 3.7中-$This->viewBuilder()->setTemplate('file');-警告(512):不推荐使用ViewBuilder::template()。改为使用ViewBuilder::setTemplate()或ViewBuilder::getTemplate()
$this->viewBuilder()->template('file');
ViewBuilder::setTemplate('file');
$this->view = '/TestView/index';
$this->set('stocksRT', $this->StockRealtime->find('all'));
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');
}