Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Layout Cake

Estou criando um site com o cake e gostaria de separar o layout do meu front-end do meu back-end. Meu front já esta pronto funcionando certinho.. agora quero criar o meu /admin só que ele fica utilizando o layout padrao default.ctp (que é do meu front) .. Como consigo definir um layout na minha aplicação para o meu /admin ?

6 respostas

Oi Janai, tudo bom?

Aqui na documentação do Cake:

https://book.cakephp.org/3.0/pt/views.html#layouts

Você encontra um passo-a-passo para criar seus layouts =)

Mas, basicamente, você criar seu layout no diretorio src/Template/Layout/seuArquivo.ctp. Depois é só escolher qual layout você vai usar no seu controller:

// Define o layout.
    $this->viewBuilder()->setLayout('seuLayout');

Qualquer dificuldade, compartilha aqui com a gente!

Abraço e bons estudos

Mas em cada controles do meu admin vou ter q informar o template admin.ctp? Seria isso? Teria como me dar um exemplo por favor?

Com certeza!

O Cake, em todas as rotas do seu controller chama automaticamente a seguinte linha de código:

    $this->viewBuilder()->setLayout('default');

Ou seja, por padrão, sempre estaremos utilizando o arquivo default.ctp!

Caso este default não faça sentido pra sua rota, você pode sobrescrever os seus casos específicos:

    $this->viewBuilder()->setLayout('seuLayout');

Aqui estamos dizendo que nossa rota utilizará como layout o seuLayout ao invés de default.

Caso sua ideia seja alterar para todas as paginas, basta alterar o proprio arquivo default.ctp mesmo =)

Qualquer duvida, compartilha com a gente!

Abraço.

No meu caso quero criar 2 layouts 1 pro front do meu site e outro pro admin.. atualmente todo o meu front está no default.ctp teria q informar em todo controller do meu admin o layout

Como você me indicaria separar o admin do front?

solução!

No seu caso, como você quer que todas as rotas do seu Controller Admin executem o mesmo layout, você pode definir o atributo na propria classe, algo como:

class AdminController extends AppController {
     public function beforeFilter(){
        $this->layout = 'admin';    
     }
    // resto do controller

Agora, todas as rotas desse controller vão utilizar o layout admin.ctp =)

Obrigado pela ajuda e atenção! show de bola!