Como posso definir o title_for_layout no padrão PagesController?
-
26-09-2019 - |
Pergunta
Eu não posso definir title_for_layout
no PagesController que vem por padrão com o CakePHP 1.3.
Eu estou usando o seguinte código na função de exibição:
$this->set('title_for_layout','some title');
O que estou fazendo de errado?
Solução
No seu controlador, o valor correspondente é $this->pageTitle
.
ATUALIZAR
Opa, conforme observado nos comentários, esta é a solução 1.2. 1.3 As possibilidades (depois de fazer algumas pesquisas) incluem:
- Garantindo isso
$title_for_layout
está sendo ecoado no layout - Colocando o
$this->set()
código na visualização e não no controlador
Outras dicas
Se você gostaria de imitar o comportamento de bolo 1.2, você pode fazer o seguinte:
Em seu app_controller, crie o seguinte método:
no app/app_controller.php (você pode precisar para criar este arquivo se você não tiver)
public $pageTitle;
public function beforeRender() {
$this->set('title_for_layout', $this->pageTitle);
}
Em seguida, em qualquer um de seus métodos de ação, em seguida, você pode usar o título de página, como você faria em 1.2.
public function index() {
$this->pageTitle = 'Some Title';
}
BeforeRender() método será chamado após o seu controladores de ter terminado o processamento, mas antes o layout a ser apresentado, permitindo a você configurar as variáveis para o layout.
No método de ação, tente o seguinte:
function index()
{
$this->pageTitle= 'Your Title';
}
Apenas pensei em adicionar a qualquer pessoa nova que encontre esta solução, você pode fazer $this->set('title', $title);
no CakePhp 1.3 dentro do controlador e o título será renderizado automaticamente.
Você pode usar :
$this->assign('title', 'Some title');
e no CTP:
<title><?= $this->fetch('title'); ?></title>
Funciona no CakePhp 3.0
Para CakePhp 3.x,
você pode seguir o conselho aqui
Essencialmente,
Lado de dentro UsersController.php
:
$this->set('title', 'Login');
Lado de dentro src/Template/Layouts/default.ctp
acima de $this->fetch('title');
Escreva:
if (isset($title)) {
$this->assign('title', $title);
}
Usar beforeRender()
em vez de. Coloque o seguinte no AppController:
class AppController extends Controller {
var $content;
function beforeRender() {
$this->set('content',$this->content);
}
}
E no controlador, você pode simplesmente fazer:
function index() {
$this->content['title'] = '123'; }
Isso vai fazer o truque.