/var/www/vhosts/ihelp.ro/httpdocs/vendor/cakephp/bake/docs/pt
Edit: /var/www/vhosts/ihelp.ro/httpdocs/vendor/cakephp/bake/docs/pt/development.rst (9708B)
Estendendo o Bake
#################
O Bake fornece uma arquitetura expansível que permite a sua aplicação ou plugin
modificar ou adicionar funcionalidades às suas funções básicas. Bake faz uso de
uma classe view dedicada que usa a ferramenta de templates `Twig
`_.
Eventos do Bake
===============
Como uma class view , ``BakeView`` emite o mesmo evento como qualquer outra
classe view, mais uma extra que inicializa eventos. No entanto, onde as classes
view padrão usam o prefixo "View.", ``BakeView`` usa o prefixo "Bake.".
O inicializador de eventos pode ser usado para fazer mudanças quando aplicado
a todas as saídas do Bake, por exemplo, ao adicionar outro helper à classe bake
view este evento pode ser usado::
on('Bake.initialize', function (Event $event) {
$view = $event->getSubject();
// In my bake templates, allow the use of the MySpecial helper
$view->loadHelper('MySpecial', ['some' => 'config']);
// And add an $author variable so it's always available
$view->set('author', 'Andy');
});
Se você deseja modificar o bake de outro plugin, é recomendável colocar os
eventos do bake do seu plugin no arquivo **config/bootstrap.php**.
Os eventos do Bake podem ser úteis para fazer pequenas alterações nos modelos
existentes. Por exemplo, para alterar os nomes das variáveis usados no
controller/template quando executar o bake, pode-se usar uma função esperando
o ``Bake.beforeRender`` para modificar as variáveis usadas no bake templates::
on('Bake.beforeRender', function (Event $event) {
$view = $event->getSubject();
// Use $rows for the main data variable in indexes
if ($view->get('pluralName')) {
$view->set('pluralName', 'rows');
}
if ($view->get('pluralVar')) {
$view->set('pluralVar', 'rows');
}
// Use $theOne for the main data variable in view/edit
if ($view->get('singularName')) {
$view->set('singularName', 'theOne');
}
if ($view->get('singularVar')) {
$view->set('singularVar', 'theOne');
}
});
Você também pode abranger os eventos ``Bake.beforeRender``
e ``Bake.afterRender`` para um arquivo específico. Por exemplo, se você quiser
adicionar ações específicas para seu UsersController ao gerar a partir de um
arquivo **Controller/controller.twig**, você pode usar o seguinte evento::
on(
'Bake.beforeRender.Controller.controller',
function (Event $event) {
$view = $event->getSubject();
if ($view->viewVars['name'] == 'Users') {
// add the login and logout actions to the Users controller
$view->set('actions', [
'login',
'logout',
'index',
'view',
'add',
'edit',
'delete'
]);
}
}
);
Ao adicionar eventos que escutam um bake templates específico, você pode
simplesmente relacionar a sua lógica de eventos com o bake e fornecer callbacks
que são facilmente testáveis.
Sintaxe de Templates do Bake
============================
Os arquivos de templates do Bake usam a sintaxe `Twig
`__.
Então, por exemplo, quando você executar algo como::
.. code-block:: bash
$ bin/cake bake shell Foo
O template usado (**vendor/cakephp/bake/src/Template/Bake/Shell/shell.twig**)
parece com algo assim::
`` Um template bake php fecha a tag
* ``<%=`` Um template bake php short-echo tag
* ``<%-`` Um template bake php abre a tag, retirando qualquer espaço em branco antes da tag
* ``-%>`` Um template bake php fecha a tag, retirando qualqualquer espaço em branco após a tag
.. _creating-a-bake-theme:
Criando um Tema Bake
=====================
Se você deseja modificar a saída produzida com o comando bake, você pode criar
o seu próprio tema para o bake que permitirá você substituir algum ou todos os
tempaltes que o bake usa. O mmelhor jeito de fazer isto é:
#. Bake um novo plugin. O nome do plugin é o 'nome do tema'
#. Crie uma nova pasta em **plugins/[name]/Template/Bake/Template/**.
#. Copie qualquer template que você queira modificar de
**vendor/cakephp/bake/src/Template/Bake/Template** para a pasta acima e modificá-los conforme sua necessidade.
#. Quando executar o bake use a opção ``--theme`` para especificar qual o tema
que o bake deve usar. Para evitar problemas com esta opção, em cada chamada,
você também pode definir o seu template customizado para ser usado como
o template padrão::
Test->classSuffixes[$this->name()])) {
$this->Test->classSuffixes[$this->name()] = 'Foo';
}
$name = ucfirst($this->name());
if (!isset($this->Test->classTypes[$name])) {
$this->Test->classTypes[$name] = 'Foo';
}
return parent::bakeTest($className);
}
* O **sufixo da classe** será anexado ao nome fornecido em sua chamada bake. No
exemplo anterior, ele criaria um arquivo ExampleFooTest.php.
* O **tipo de classe** será o subdomínio usado que levará ao seu arquivo
(relativo ao aplicativo ou ao plugin em que você está inserindo). No exemplo
anterior, ele criaria seu teste com o namespace App\Test\TestCase\Foo.
.. meta::
:title lang=en: Extending Bake
:keywords lang=en: command line interface,development,bake view, bake template syntax,twig,erb tags,percent tags