Назначение макета в CakePHP - PullRequest
       11

Назначение макета в CakePHP

3 голосов
/ 15 сентября 2011

Можем ли мы определить макет для всего контроллера в этом конкретном контроллере? Я раньше использовал фильтр appcontroller для этой цели, но он больше не решает его. Поэтому мне нужно, чтобы в контроллере было какое-то определение макета, которое будет применяться для всех действий этого контроллера.

Привет

Ответы [ 4 ]

17 голосов
/ 15 сентября 2011

используйте его:

внутри вашего действия

$this->layout = 'mylayout';

вы должны создать этот макет в view / layout / mylayout.ctp

или добавить эту функцию в контроллерустановить макет для каждого действия контроллера

  function beforeFilter() {
    parent::beforeFilter();
        $this->layout = 'mylayout';
  }
6 голосов
/ 15 сентября 2011

Лучший способ сделать что-то подобное

var $layout = 'my_account';

Это относится ко всему вашему контроллеру.После добавления этого кода он будет выглядеть примерно так:

class MyAccountsController extends AppController {
    var $name = 'MyAccounts';
    var $components = array('Email');
    var $layout = 'my_account';

Если вы не хотите использовать какое-либо действие, которое вы можете явно определить в своем действии, например,

function my_action(){
    $this->layout = 'another_layout';
}

этот my_action примет другой макет, а остальное действие примет my_account макет

5 голосов
/ 20 июня 2016

Для CakePHP 3.0 Красный Бархат

Расположение файла макета:

enter image description here

Новый параметр:

$this->viewBuilder()->layout("loginUI");

* "loginUI" - это макет имени файла

0 голосов
/ 05 июня 2018

Да, мы можем. Вам просто нужно создать файл макета в разделе Шаблон >> Макет >> yourlayout.ctp. Затем загрузите этот макет вместе с контроллером:

class MyController extends AppController {
    public function initialize(){
        parent :: initialize();
        $this->layout = "yourlayout";

      }
}

это автоматически реализует этот макет как контроллер по умолчанию. вы можете использовать $ this-> viewBuilder-> layout ("yourlayout"); внутри initialize (), но это приводит к ошибке «Вызов функции-члена layout () для логического значения». Так что вместо этого вы можете использовать первое.

...