/var/www/vhosts/ihelp.ro/httpdocs/vendor/cakephp/bake/docs/fr
Edit: /var/www/vhosts/ihelp.ro/httpdocs/vendor/cakephp/bake/docs/fr/development.rst (12243B)
Etendre Bake
############
Bake dispose d'une architecture extensible qui permet à votre application ou
à vos plugins de modifier ou ajouter la fonctionnalité de base. Bake utilise une
classe de vue dédiée qui utilise le moteur de template
`Twig
`_.
Events de Bake
==============
Comme une classe de vue, ``BakeView`` envoie les mêmes events que toute autre
classe de vue, ainsi qu'un event initialize supplémentaire. Cependant,
alors que les classes de vue standard utilisent le préfixe d'event
"View.", ``BakeView`` utilise le préfixe d'event "Bake.".
L'event initialize peut être utilisé pour faire des changements qui
s'appliquent à toutes les sorties fabriquées avec bake, par exemple pour ajouter
un autre helper à la classe de vue bake, cet event peut être utilisé::
on('Bake.initialize', function (EventInterface $event) {
$view = $event->getSubject();
// Dans mes templates de bake, permet l'utilisation du helper MySpecial
$view->loadHelper('MySpecial', ['some' => 'config']);
// Et ajoute une variable $author pour qu'elle soit toujours disponible
$view->set('author', 'Andy');
});
Les events de bake peuvent être pratiques pour faire de petits changements dans
les templates existants. Par exemple, pour changer les noms de variables
utilisés lors de la création avec bake de fichiers de controller/template, on
pourra utiliser une fonction qui écoute ``Bake.beforeRender`` pour modifier les
variables utilisées dans les templates de bake::
on('Bake.beforeRender', function (EventInterface $event) {
$view = $event->getSubject();
// Utilise $rows pour la principale variable de données dans les index
if ($view->get('pluralName')) {
$view->set('pluralName', 'rows');
}
if ($view->get('pluralVar')) {
$view->set('pluralVar', 'rows');
}
// Utilise $theOne pour la principale variable de données dans les view/edit
if ($view->get('singularName')) {
$view->set('singularName', 'theOne');
}
if ($view->get('singularVar')) {
$view->set('singularVar', 'theOne');
}
});
Vous pouvez aussi scoper les events ``Bake.beforeRender`` et
``Bake.afterRender`` dans un fichier généré spécifique. Par exemple, si vous
souhaitez ajouter des actions spécifiques à votre UsersController quand vous le
générez à partir d'un fichier **Controller/controller.twig**, vous pouvez
utiliser l'event suivant::
on(
'Bake.beforeRender.Controller.controller',
function (EventInterface $event) {
$view = $event->getSubject();
if ($view->get('name') === 'Users') {
// ajouter les actions login et logout au controller Users
$view->set('actions', [
'login',
'logout',
'index',
'view',
'add',
'edit',
'delete'
];
}
}
);
En scopant les écouteurs d'event vers des templates de bake spécifiques, vous
pouvez simplifier votre logique d'event liée à bake et fournir des callbacks
qui sont plus faciles à tester.
Syntaxe de Template de Bake
===========================
Les fichiers de template de Bake utilisent la syntaxe de template de
`Twig
`__.
Ainsi, par exemple, pour créer avec bake un shell comme ceci:
.. code-block:: bash
bin/cake bake command Foo
Le template utilisé
(***vendor/cakephp/bake/templates/bake/Command/command.twig**)
ressemble à ceci::
declare(strict_types=1);
namespace {{ namespace }}\Command;
use Cake\Command\Command;
use Cake\Console\Arguments;
use Cake\Console\ConsoleIo;
use Cake\Console\ConsoleOptionParser;
/**
* {{ name }} command.
*/
class {{ name }}Command extends Command
{
/**
* Méthode hook pour définir le parseur d'option de cette commande.
*
* @see https://book.cakephp.org/4/fr/console-commands/commands.html#defining-arguments-and-options
* @param \Cake\Console\ConsoleOptionParser $parser Le parseur à définir
* @return \Cake\Console\ConsoleOptionParser Le parseur construit.
*/
public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser
{
$parser = parent::buildOptionParser($parser);
return $parser;
}
/**
* Implémentez cette méthode avec la logique de votre commande.
*
* @param \Cake\Console\Arguments $args Les arguments de la commande.
* @param \Cake\Console\ConsoleIo $io La console il
* @return null|void|int Le code de sortie ou null pour un succès
*/
public function execute(Arguments $args, ConsoleIo $io)
{
}
}
Et la classe résultante construite avec bake (**src/Command/FooCommand.php**)
ressemble à ceci::
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);
}
* Le **suffixe de classe** sera ajouté après le nom passé à ``bake``. Dans le
cadre de l'exemple ci-dessus, cela créerait un fichier ``ExempleFooTest.php``.
* Le **type de classe** sera le sous-namespace utilisé pour atteindre votre
fichier (relatif à l'application ou au plugin dans lequel vous faites le
``bake``). Dans le cadre de l'exemple ci-dessus, cela créerait le test avec le
namespace ``App\Test\TestCase\Foo``.
.. meta::
:title lang=fr: Etendre Bake
:keywords lang=fr: interface ligne de commande,development,bake view, bake template syntax,erb tags,asp tags,percent tags