В основном в default.ctp У меня есть это для моего названия:
<title> <?= $this->fetch('title') ?> </title>
И внутри контроллера у меня есть эта строка:
$this->set('title', 'Test-Title');
Но он ничего не делает, он все еще отображает имя контроллеров (Джобс, полное имя контроллеров os JobsController.ctp)
Но если я поместил это внутри моего файла вида:
$this->assign('title', 'Test-Title');
Он меняет название. Итак, что случилось с $ this-> set ('title', $ title) ?
Вы можете просто set()
переменную в вашем контроллере:
// View or Controller $this->set('title', 'Test-title');
Затем используйте его как стандартную переменную в вашем макете или представлении:
<!-- Layout or View --> <title> <?php echo $title; ?> </title>
Подробности здесь: http://book.cakephp.org/3.0/ru/views.html#setting-view-variables
Использование функции assign()
отличается, поэтому он работает с fetch()
. assign()
используется с блоками просмотра: http://book.cakephp.org/3.0/en/views.html#using-view-blocks
fetch()
возвращает содержимое блока, а не переменную. С помощью set()
в вашем контроллере set()
переменная, которая может выводиться в шаблонах View, повторяя эту переменную:
<?php echo $title; ?>
Если вы хотите использовать fetch()
вам нужно использовать его в сочетании с assign()
в шаблонах View, чтобы определить блок. Например, в вашем шаблоне просмотра используйте: –
<?php $this->assign('title', $title); ?>
А затем в шаблоне макета: –
<title><?php echo $this->fetch('title'); ?></title>
В CakePHP 3 идея состоит в том, чтобы установить заголовок страницы, назначив его в представлении, относящемся к рендерингу страницы. Это отличается от того, как это было изначально обработано в CakePHP 2, где вы определяете title_for_layout
в своем контроллере, а затем эхо-переменную $title_for_layout
в шаблоне макета (это было устарело в пользу подхода CakePHP 3 в более поздних версиях Cake 2).
Просто для завершения, я столкнулся с ситуацией, когда неправильный сценарий .js с неопределенными переменными, на которые ссылается между <head></head>
приводит к тому, что теги <title></title>
отправляются в DOM (показаны в источнике страницы), но Chrome , Firefox и (из памяти) MSIE все не удалось доставить содержание заголовка в пользовательский интерфейс APP, снова из памяти – iOS mobile не был затронут.