Подтвердить что ты не робот

Отображение контроллера на другое представление в 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?

Я пробовал все от здесь без везения.

4b9b3361

Ответ 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');
}