This course is still being released! Check back later for more chapters.
Configuración del bundle
Keep on Learning!
If you liked what you've learned so far, dive in! Subscribe to get access to this tutorial plus video, code and script downloads.
With a Subscription, click any sentence in the script to jump to that part of the video!
Login SubscribeTenemos que informar a nuestro bundle de nuestra nueva y brillante entidad Translation
. La configuración del bundle es la mejor forma de hacerlo.
Seguro que ya has utilizado antes la configuración de bundle. Son los archivos YAML
dentro del directorio config/packages/
de tu aplicación. Por ejemplo, doctrine.yaml
es la configuración del bundle Doctrine.
Definir la configuración de tu bundle
Podemos definir la configuración de nuestro bundle dentro de nuestra clase bundle AbreObjectTranslationBundle.php
en el directorio src
de tu bundle.
Anula otro método: configure()
. El método padre también está vacío, así que podemos eliminar esta llamada:
// ... lines 1 - 10 | |
final class ObjectTranslationBundle extends AbstractBundle | |
{ | |
public function configure(DefinitionConfigurator $definition): void | |
{ | |
// ... lines 15 - 19 | |
} | |
// ... lines 21 - 32 | |
} |
Ahora la definición. Escribe$definition->rootNode()
, éste es el nodo de configuración de nivel superior, que se define como una matriz. Como es una matriz, escribe ->children()
- la definición de la matriz. Para las definiciones, necesitamos llamar siempre a ->end()
para marcarla como finalizada. Hazlo enseguida, para que no se nos olvide.
Dentro, añade nuestro primer nodo: ->stringNode('translation_class')
. En nuestra configuración, ésta será la clave del array. De nuevo, llama a ->end()
para terminarlo:
// ... lines 1 - 10 | |
final class ObjectTranslationBundle extends AbstractBundle | |
{ | |
public function configure(DefinitionConfigurator $definition): void | |
{ | |
$definition->rootNode() | |
->children() | |
->stringNode('translation_class')->end() | |
->end() | |
; | |
} | |
// ... lines 21 - 32 | |
} |
Listado de configuraciones de bundle disponibles
En tu terminal, lista las configuraciones de bundle disponibles con:
symfony console config:dump-reference
Sin argumentos. Esto lista todos los bundles cargados, y su clave de configuración (o alias de extensión). DoctrineBundle
, alias doctrine
, DoctrineMigrationsBundle
, alias doctrine_migrations
. Aquí está nuestro bundle: ObjectTranslationBundle
aliasobject_translation
.
Me gustaría ponerle el prefijo symfonycasts
, como en el bundle Tailwind que aparece a continuación.
Cambiar el alias de extensión de tu bundle
He aquí cómo hacerlo. En ObjectTranslationBundle
, indaga en la clase AbstractBundle
.protected string $extensionAlias
lo que necesitamos anular. Por defecto, está vacía y se detecta automáticamente a partir del nombre del bundle (en mayúsculas sin el sufijo Bundle
). Copia la propiedad y, de nuevo en nuestra clase bundle, pégala. Cámbiala a symfonycasts_object_translation
:
// ... lines 1 - 10 | |
final class ObjectTranslationBundle extends AbstractBundle | |
{ | |
protected string $extensionAlias = 'symfonycasts_object_translation'; | |
// ... lines 14 - 34 | |
} |
Visualizar la configuración de tu bundle
Genial, ahora vuelve a ejecutar el comando:
symfony console config:dump-reference
Ya está, symfonycasts_object_translation
. Ejecuta de nuevo el comando, pero esta vez, añádelo como argumento:
symfony console config:dump-reference symfonycasts_object_translation
Genial, aquí está nuestra configuración por defecto del bundle en YAML. Muestra translation_class
como null, que es lo que significa esta tilda.
Este resultado es muy útil para nuestros usuarios y es una especie de documentación. Podemos mejorarla aún más.
Mejorar tu configuración con ejemplos e información
Vuelve a nuestra clase bundle y amplía este stringNode
para mover el ->end()
a una nueva línea. Aquí es donde podemos añadir configuración adicional para este nodo. Utilizar sangría es muy importante - estas definiciones pueden llegar a ser bastante complejas y grandes.
A veces, PhpStorm pierde la noción de la sangría, así que tienes que pelearte un poco con ella.
Primero, añade ->info()
- es una breve descripción del nodo. EscribeThe class name of your Translation entity
. En una nueva línea, escribe->example('App\Entity\Translation')
para mostrar un valor de ejemplo:
// ... lines 1 - 10 | |
final class ObjectTranslationBundle extends AbstractBundle | |
{ | |
// ... lines 13 - 14 | |
public function configure(DefinitionConfigurator $definition): void | |
{ | |
$definition->rootNode() | |
->children() | |
->stringNode('translation_class') | |
->info('The class name of your Translation entity.') | |
->example('App\Entity\Translation') | |
->end() | |
->end() | |
; | |
} | |
// ... lines 26 - 37 | |
} |
De vuelta al terminal, ejecuta de nuevo el comando:
symfony console config:dump-reference symfonycasts_object_translation
¡Genial! Se ha añadido una descripción encima de translation_class
y nuestro ejemplo a su lado. Están comentados, así que puedes copiarlos/pegarlos fácilmente en tus propios archivos YAML.
A continuación, añadiremos algo de validación para este nodo.