View Cells no Cakephp

Um dos recursos muito interessantes disponível a partir da versão 3 do framework Cakephp, é o View Cells, ele possui uma funcionalidade parecida com a dos Elements que já estava disponível na versão 2 do framework. Para deixar claro porque seria necessário utilizar uma view cell em uma aplicação, vou dar uma breve introdução ao conceito de Elements. Os Elements são partes reutilizáveis para seu template, além de ser utilizado para facilitar a reutilização, também é usado para deixar mais limpo suas views e layouts. Para criar um Element você deve criar um arquivo .ctp em src/Template/Element e para utilizá-lo basta dar um echo em sua view desta forma:

echo $this->element('seuelement');

Ainda há a possibilidade de passar variáveis para os elements, fazendo com que eles possam ser mais flexíveis. Mas caso você precise de mais lógica ou mesmo que tenha que buscar algo na sua base de dados, como um menu dinâmico por exemplo, os Elements já não são indicados, é ai que as View Cells entram, elas possuem a funcionalidade de template e um método que serve o template, são indicadas quando é necessário um componente reusável, que possui interação com os models e alguma lógica. Para exemplificar imagine que você tem um site de eventos e em algumas páginas você deve exibir um contador de tempo para o próximo evento, como este abaixo:

Você vai precisar resgatar da sua base de dados o próximo evento, aplicar o template e alguma lógica javascript para executar o contador. Para criar este componente utilizando View Cells, crie uma classe em src/View/Cell, neste caso vou chamar de NextEventCell.php:

Esta classe funciona como um mini-controller e neste caso tem uma action display que resgata o próximo evento e o seta na variável $nextEvent que ficará disponível para a View, agora para criar o template da View Cell, crie o arquivo display.ctp em src/Template/Cell/NextEvent :

Neste arquivo somente utilizei a variável que setei anteriormente para exibir os dados do evento. Agora só falta incluir nas minhas views certo? Para fazer isso, utilize:

echo $this->cell('NextEvent');

Agora, se voltarmos no arquivo NextEvent.php você perceberá que possuímos apenas o método display, você pode ter um método para representar cada comportamento da sua view cell, se o nosso componente tivesse uma versão contraída, poderíamos criar um método small, um arquivo small.ctp (no mesmo diretorio do display.ctp) e na view utilizaria da seguinte forma:

echo $this->cell(’NextEvent::small’);

Simples não é mesmo? As view cells trazem um grande poder de organização e reusabilidade, já que isola a lógica, ao invés de deixar o código todo nos seus controllers.

Espero que seja útil! ☺

Fonte: https://book.cakephp.org/3.0/en/views/cells.html