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