Как я могу установить tell_for_layout в PagesController по умолчанию?
-
26-09-2019 - |
Вопрос
Я не могу установить title_for_layout
В PagesController, который поставляется по умолчанию с CakePhp 1.3.
Я использую следующий код в функции отображения:
$this->set('title_for_layout','some title');
Что я делаю не так?
Решение
В вашем контроллере соответствующее значение $this->pageTitle
.
ОБНОВИТЬ
Ой, как отмечено в комментариях, это решение 1.2. 1.3 Возможности (после выполнения некоторых исследований) включают в себя:
- Обеспечение
$title_for_layout
подвергается эхом в макете - Размещение
$this->set()
код в виду, а не в контроллере
Другие советы
Если вы хотите имитировать поведение торта 1.2, вы можете сделать следующее:
В вашем App_Controller создайте следующий метод:
в приложении / app_controller.php (вам может потребоваться создать этот файл, если вы еще этого не сделали)
public $pageTitle;
public function beforeRender() {
$this->set('title_for_layout', $this->pageTitle);
}
Тогда в любом из ваших методов действия вы можете использовать PagEtitle, как вы бы в 1.2.
public function index() {
$this->pageTitle = 'Some Title';
}
Метод BeForerender () будет вызываться после завершения обработки ваших контроллеров, но до указания компоновки, что позволяет устанавливать переменные для макета.
В методе действий попробуйте это:
function index()
{
$this->pageTitle= 'Your Title';
}
Просто думал, что я добавил к любым новым людям, находящимся этим решение, вы можете сделать $this->set('title', $title);
В CakePhp 1.3 внутри контроллера и заголовок будет отображаться автоматически.
Ты можешь использовать :
$this->assign('title', 'Some title');
А в CTP:
<title><?= $this->fetch('title'); ?></title>
Он работает в CakePhp 3.0
Для CakePhp 3.x,
Вы можете следовать совету здесь
По сути,
Внутри UsersController.php
:
$this->set('title', 'Login');
Внутри src/Template/Layouts/default.ctp
выше $this->fetch('title');
записывать:
if (isset($title)) {
$this->assign('title', $title);
}
Использовать beforeRender()
вместо. Поместите следующее в AppController:
class AppController extends Controller {
var $content;
function beforeRender() {
$this->set('content',$this->content);
}
}
А в контроллере вы можете просто сделать:
function index() {
$this->content['title'] = '123'; }
Это сделает трюк.