CakePHP 3.0 – Use a coleção para formatar tags como string dividida por vírgulas

O CakePHP 3.0 tem uma ótima biblioteca Collections :

As classes de coleção fornecem um conjunto de ferramentas para manipular matrizes ou objetos Traversable. Se você já usou o underscore.js, você tem uma ideia do que pode esperar das classes de coleção.

Instâncias de coleção são imutáveis, modificar uma coleção irá gerar uma nova coleção. Isso torna o trabalho com objetos de coleção mais previsível, pois as operações não têm efeitos colaterais.

Você pode usá-lo para trabalhar com resultados de pesquisa. Vamos dar um exemplo – queremos editar tags de nota. Colocaremos as tags como uma string, separadas por vírgulas.

// App/Controller/NotesController.php
...

$data
= $this->Notes->get($id, [
'contain' => ['Tags']
]);

$this
->set('tag_list', implode(", ",
(new Collection($data->tags))->extract('name')->toArray()));

Veja, estamos criando uma nova coleção de tags de nota, em seguida, extrair o campo namee converter os resultados em matriz. Que será implodido por vírgulas. Tudo isso em uma única linha.

Temos uma string, então vamos colocá-la na entrada do formulário:


// App/Template/Notes/edit.ctp
...

<?= $this->Form->input('tag_list', ['value' => $tag_list]);?>