Chapters
This course is still being released! Check back later for more chapters.
-
Course Code
Subscribe to download the code!
Subscribe to download the code!
-
This Video
Subscribe to download the video!
Subscribe to download the video!
-
Subtitles
Subscribe to download the subtitles!
Subscribe to download the subtitles!
-
Course Script
Subscribe to download the script!
Subscribe to download the script!
Scroll down to the script below, click on any sentence (including terminal blocks) to jump to that spot in the video!
Tenemos un hogar para nuestro bundle dentro de nuestra aplicación. Y hemos configurado su archivocomposer.json para que esté marcado como paquete para Composer. Ahora necesita una "clase bundle" para que Symfony pueda cargarlo como un bundle.
Esta clase es el corazón de tu bundle, el punto de entrada principal.
En el directorio src/, crea una nueva clase PHP... llámala ObjectTranslationBundle. Pero espera, tenemos un pequeño contratiempo. El "campo namespace" no está siendo rellenado por PhpStorm como suele ser habitual. PhpStorm aún no conoce el espacio de nombres de nuestro bundle.
Sal de este diálogo por ahora. En el archivo composer.json de nuestro bundle, establecemos que el espacio de nombres de nuestro directorio src/ sea SymfonyCasts\ObjectTranslationBundle\.
Copia el espacio de nombres. Aquí tenemos que ayudar un poco a PhpStorm.
Actualizar tu espacio de nombres en PHPStorm
Navega hasta la configuración de tu PhpStorm y busca la sección "Directorios". Esta es la estructura actual de nuestro proyecto. Abre object-translation-bundle y haz clic en el directorio src. Arriba, márcalo como "Fuentes". Ahora PhpStorm sabe que es un directorio "fuentes", y lo ha añadido aquí a la derecha.
Haz clic en el pequeño icono del lápiz para establecer el espacio de nombres, o "prefijo del paquete" para esta fuente. Pega, elimina las barras inclinadas adicionales y haz clic en "Aceptar".
Pulsa "Aplicar" y "Aceptar" para guardar esta actualización, y cierra el archivo composer.json.
Crear tu clase
De nuevo, crea una nueva clase PHP en el directorio src/ de nuestro bundle. ¡Genial! ¡El espacio de nombres ya está rellenado! Llámala ObjectTranslationBundle.
Esta es nuestra clase bundle. Primero, márcala como final - no queremos que nadie extienda esto. Déjala vacía por ahora y haz que extienda AbstractBundledesde el componente HttpKernel:
|
Show Lines
|
// ... lines 1 - 2 |
| namespace SymfonyCasts\ObjectTranslationBundle; | |
| use Symfony\Component\HttpKernel\Bundle\AbstractBundle; | |
| final class ObjectTranslationBundle extends AbstractBundle | |
| { | |
| } |
Clase bundle mejorada
Si alguna vez has construido bundles en el pasado, concretamente antes de Symfony 6, puede que recuerdes que las clases bundle solían extender Bundle, no AbstractBundle.
En Symfony 6, se ha mejorado la forma de construir bundles. La nueva clase AbstractBundleproporciona un enfoque más racionalizado para el desarrollo de bundles. Ahora puedes alojar casi toda la configuración de tu bundle y la lógica de extensión directamente dentro de tu clase "bundle". La forma antigua requería varias clases adicionales. Consulta esta entrada de blog para obtener más información.
A continuación, ¡vamos a "instalar" este bundle en nuestra aplicación!
2 Comments
Hey @seb-jean!
Yep, that's totally valid. Here are a few thoughts/reasons:
- I strayed away because I wanted to show how to customize the alias in a later chapter.
- This is my personal preference. It bothers me to have the namespace in a class name. Reminds me too much of the dark times before PHP has namespaces.
- if your bundle has Twig templates, this makes the template names shorter.
@ObjectTranslation/template.html.twigvs@SymfonyCastsObjectTranslation/template.html.twig
Bottom line: mostly personal preference on my part.
Cheers!
Kevin
"Houston: no signs of life"
Start the conversation!
What PHP libraries does this tutorial use?
// composer.json
{
"require": {
"php": ">=8.2",
"ext-ctype": "*",
"ext-iconv": "*",
"doctrine/dbal": "^3.10.0", // 3.10.0
"doctrine/doctrine-bundle": "^2.15", // 2.15.0
"doctrine/doctrine-migrations-bundle": "^3.4.2", // 3.4.2
"doctrine/orm": "^3.5.0", // 3.5.0
"league/commonmark": "^2.7.1", // 2.7.1
"symfony/asset": "7.3.*", // v7.3.0
"symfony/asset-mapper": "7.3.*", // v7.3.0
"symfony/console": "7.3.*", // v7.3.1
"symfony/crowdin-translation-provider": "7.3.*", // v7.3.0
"symfony/dotenv": "7.3.*", // v7.3.0
"symfony/flex": "^2.8.1", // v2.8.1
"symfony/framework-bundle": "7.3.*", // v7.3.1
"symfony/runtime": "7.3.*", // v7.3.1
"symfony/stimulus-bundle": "^2.28", // v2.28.0
"symfony/translation": "7.3.*", // v7.3.1
"symfony/twig-bundle": "7.3.*", // v7.3.1
"symfony/yaml": "7.3.*", // v7.3.1
"symfonycasts/object-translation-bundle": "@dev", // dev-_tuts/bundle/3-install-our-bundle
"symfonycasts/tailwind-bundle": "^0.10.1", // v0.10.1
"twig/extra-bundle": "^2.12|^3.21", // v3.21.0
"twig/markdown-extra": "^3.21", // v3.21.0
"twig/string-extra": "^3.21", // v3.21.0
"twig/twig": "^2.12|^3.21.1" // v3.21.1
},
"require-dev": {
"phpunit/phpunit": "^9.6.23", // 9.6.23
"symfony/browser-kit": "7.3.*", // v7.3.0
"symfony/css-selector": "7.3.*", // v7.3.0
"symfony/debug-bundle": "7.3.*", // v7.3.0
"symfony/maker-bundle": "^1.64", // v1.64.0
"symfony/monolog-bundle": "^3.10", // v3.10.0
"symfony/phpunit-bridge": "^7.3.1", // v7.3.1
"symfony/stopwatch": "7.3.*", // v7.3.0
"symfony/web-profiler-bundle": "7.3.*", // v7.3.1
"zenstruck/browser": "^1.9.1", // v1.9.1
"zenstruck/foundry": "^2.6.1" // v2.6.1
}
}
Following the best practices at https://symfony.com/doc/current/bundles/best_practices.html#bundle-name, I would have named the bundle
SymfonyCastsObjectTranslationBundleinstead ofObjectTranslationBundle. What do you think?