Отображение контроллера на другое представление в CakePHP
Есть ли способ визуализации контроллера на другой вид, а затем нормальный? Я пытаюсь передать некоторые данные с контроллера на представление, отличное от стандартного. Значение моего контроллера называется:
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');
}
}
... и My view находится в views- > TestView- > index.ctp
Еще один вопрос, как передать это значение PHP, а не файл ctp вне рамки CakePHP?
Я пробовал все от здесь без везения.
Ответы
Ответ 1
Правильный путь:
$this → render('TestView/index');
Как сказано в ответе выше, вы можете использовать $this → set
для передачи переменной в View.
Однако, если это не даст вам то, что вы хотите. Я предполагаю, что вы также хотите, чтобы действие отображало другой макет (макет не по умолчанию). Вы можете попробовать сделать $this → layout = 'layoutname';
(Макеты находятся в папке макетов, по умолчанию используется default.ctp).
Примечание. Контроллер CakePHP не предназначен для передачи данных в файл без просмотра (например,.php). .ctp
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');
Ответ 3
Попробуйте указать имя представления без расширения .ctp.
$this->render('file');
Ответ 4
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, переменная [stockTRTR], которая устанавливается с использованием
$ this → set(), также будет доступен на странице просмотра ручного рендеринга ['index.ctp'].
Ответ 5
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`);
}
}
Ответ 6
$this->view = '/TestView/index';
$this->set('stocksRT', $this->StockRealtime->find('all'));
Ответ 7
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');
}