Extendendo o Bake ################# Bake fornece uma extenssiva arquitetura que permite a sua aplicação ou plugin ser modificado ou adicionar funcionalidades as bases. Bake faz uso de uma classe view dedicada que usa o `Twig `_ engine de templates. 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 classe view padrão usa o prefixo "View.", ``BakeView`` usa o prefixo "Bake.". O inicializador de eventos pode ser usado para fazer mudanças quando aplicadoa toda a saida do bake , por exemplo ao adicionar outro helper ao bake view class este evebti oide ser usado:: on('Bake.initialize', function (Event $event) { $view = $event->getSubject(); // No meu bake de templates, permite uso de MuSpecial helper $view->loadHelper('MySpecial', ['some' => 'config']); // E adicionar uma variável $author então este estará sempre disponível $view->set('author', 'Andy'); }); Se você quer modificar o seu bake apartir de outro pugin, coloque o bake do seu plugin dentro do arquivo do seu próprio plugin ``config/bootstrap.php`` será uma boa ideia. 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 quando o controlador / modelo de baking arquivos podem usar uma função ouvindo ``Bake.beforeRender`` para modificar as variaveis usadas no bake templates:: on('Bake.beforeRender', function (Event $event) { $view = $event->getSubject(); // Use $ rows para a variável de dados principal em índices if ($view->get('pluralName')) { $view->set('pluralName', 'rows'); } if ($view->get('pluralVar')) { $view->set('pluralVar', 'rows'); } // Use $ theOne para a variável de dados principal em exibição / edição if ($view->get('singularName')) { $view->set('singularName', 'theOne'); } if ($view->get('singularVar')) { $view->set('singularVar', 'theOne'); } }); Você também pode abranger o ``Bake.beforeRender`` e ``Bake.afterRender`` eventos para um arquivo gerado 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') { // adicionar ações de login e logout ao Users controller $view->viewVars['actions'] = [ 'login', 'logout', 'index', 'view', 'add', 'edit', 'delete' ]; } } ); Ao adicionar eventos que escutam o seu bake de templates, você pode simplesmente relacionar a sua logica de eventos com o bake e fornecer callbacks que são facilmente testáveis. Sintaxe de Templates do Bake ============================ Bake arquivos de template usa a sintaxe `Twig `__ de templates . Uma forma de ver/entender como o bake de templates funciona, especialmente quando tentamos modificar os arquivos de templates, é executar o bake de uma classe que compara o template usado com o template pré processado deixado anteriormente pela aplicação **tmp/bake** folder. Então, por exemplo, quando baking a shell é 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, revirando qualquer espaço em branco antes da tag * ``-%>`` Um template bake php fecha a tag, revirando 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, aos quais permitirá a você subsituir algum ou todos os tempaltes que o bake usa. o mmelhor jeito de fazer isto é: #. Bake um novo plugin. O nome do plugin é o bake 'nome do tema' #. Crie uma nova pasta em **plugins/[name]/src/Template/Bake/Template/**. #. Copie qualquer template que você queira para sobrescrer de **vendor/cakephp/bake/src/Template/Bake/Template** que feche com os arquivos no seu plugin. #. Quando executando 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ê tambem 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); } * A **class suffix** vai se indexado ao mesmo nome providenciado por você na sua chamada de ``bake`` . No exemplo anterior, isto criaria o arquivo ``ExampleFooTest.php`` . * O **class type** vai ser o sub namespace usado para o seu arquivo (relativo ao aplicativo ou plugin que vocês está baking). No exemplo anterior, isto poderia criar o 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