Flag of Ukraine
SymfonyCasts stands united with the people of Ukraine

Mejoras en las recetas: ¡Parte 2!

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.

Start your All-Access Pass
Buy just this tutorial for $10.00

With a Subscription, click any sentence in the script to jump to that part of the video!

Login Subscribe

Corre:

composer recipes:update

Lo siguiente es doctrine-extensions-bundle. Este... cuando miramos... ¡sólo modificamos un comentario! Fácil!. Así que confirma eso... y luego pasa a debug-bundle.

symfony/debug-bundle Receta

composer recipes:update

Limpia la pantalla y ejecuta eso. Esto ha hecho dos cambios. Ejecutar:

git status

El primer cambio fue que eliminó un archivo específico del entorno... y lo trasladó al archivo principal. El segundo cambio, que no es muy habitual en las actualizaciones de recetas, es que en config/bundles.php, antes cargaba DebugBundle en el entorno devy en el entorno test. Ahora recomendamos cargarlo sólo en el entorno dev. Puedes cargarlo en el entorno test, pero tiende a ralentizar las cosas, así que se ha eliminado por defecto.

... lines 1 - 2
return [
... lines 4 - 9
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true],
... lines 11 - 24
];

¡Es fácil! Confirma esos cambios... ¡y sigue adelante!

receta symfony/monolog-bundle

composer recipes:update

El siguiente es symfony/monolog-bundle. Este tiene un conflicto, pero es bastante sencillo. Anteriormente, teníamos archivos específicos del entorno en los directorios dev/, prod/, y test/. Todos ellos se han trasladado al archivo centralconfig/packages/monolog.yaml. La única razón por la que había un conflicto en mi proyecto es porque había creado previamente este archivo en un tutorial para añadir un nuevo canal markdown. Moveré mi canal markdown aquí abajo... y mantendré lo nuevo.

monolog:
channels:
- markdown
... lines 4 - 63

Debajo de esto, puedes ver la configuración dev para el registro, la configuración test y la configuración prod. De nuevo, si tenías una configuración personalizada en tus archivos antiguos, asegúrate de traerla al nuevo archivo para que no se pierda.

... lines 1 - 5
when@dev:
monolog:
handlers:
main:
type: stream
... lines 11 - 26
when@test:
monolog:
handlers:
main:
type: fingers_crossed
... lines 32 - 40
when@prod:
monolog:
handlers:
main:
type: fingers_crossed
... lines 46 - 63

Añade estos cambios... y... confirma.

receta symfony/routing

Luego vuelve a la derecha:

composer recipes:update

¡Nos estamos acercando! Actualiza symfony/routing. Veamos. Esto ha eliminado otro archivo de configuración específico del entorno. ¡Sí! ¡Menos archivos! También destaca un nuevodefault_uri config que se establece si alguna vez necesitas generar URLs absolutas desde dentro de un comando.

Antes lo hacías configurando los parámetros de router.request_context. Ahora es más fácil, y esto lo anuncia.

framework:
router:
utf8: true
# Configure how to generate URLs in non-HTTP contexts, such as CLI commands.
# See https://symfony.com/doc/current/routing.html#generating-urls-in-commands
#default_uri: http://localhost
when@prod:
framework:
router:
strict_requirements: null

Confirma esto... ¡y sigamos!

symfony/security-bundle Receta

composer recipes:update

Hemos llegado a symfony/security-bundle. Éste tiene un conflicto... y está dentro de config/packages/security.yaml. Están ocurriendo algunas cosas importantes. La actualización de la receta ha añadido enable_authenticator_manager: true. Esto habilita el nuevo sistema de seguridad. Hablaremos de ello más adelante. Por ahora, pon esto en false para que sigamos utilizando el antiguo sistema de seguridad.

security:
... lines 2 - 9
enable_authenticator_manager: false
... lines 11 - 64

También ha añadido algo llamado password_hashers, que sustituye a encoders. También vamos a hablar de eso más adelante. Por ahora, quiero que mantengas ambas cosas.

security:
encoders:
App\Entity\User:
algorithm: auto
... lines 5 - 11
password_hashers:
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
... lines 14 - 64

También hay un conflicto en el cortafuegos. El cambio importante es que la nueva receta tiene lazy: true. Eso sustituye a anonymous: lazy, así que podemos seguir adelante y mantener ese cambio... pero utilizar el resto de nuestro cortafuegos.

security:
... lines 2 - 20
firewalls:
... lines 22 - 24
main:
lazy: true
provider: app_user_provider
guard:
authenticators:
- App\Security\LoginFormAuthenticator
logout:
path: app_logout
... lines 33 - 64

Ah, y en la parte inferior, tenemos una nueva y brillante sección when@test, que establece un hasher de contraseña personalizado. Puedes leer el comentario. Esto acelera tus pruebas haciendo mucho más rápido el hash de las contraseñas en el entorno de pruebas, donde no nos importa la seguridad de nuestro algoritmo de hash.

... lines 1 - 51
when@test:
security:
password_hashers:
# By default, password hashers are resource intensive and take time. This is
# important to generate secure password hashes. In tests however, secure hashes
# are not important, waste resources and increase test times. The following
# reduces the work factor to the lowest possible values.
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
algorithm: auto
cost: 4 # Lowest possible value for bcrypt
time_cost: 3 # Lowest possible value for argon
memory_cost: 10 # Lowest possible value for argon

Añadamos los archivos... y sigamos.

receta symfony/traducción

Lo siguiente es symfony/translation. Esto no es importante... sólo muestra algunas opciones de configuración nuevas. Todas están comentadas, así que... es bueno verlas, pero no son importantes.

framework:
... line 2
translator:
... lines 4 - 6
# providers:
# crowdin:
# dsn: '%env(CROWDIN_DSN)%'
# loco:
# dsn: '%env(LOCO_DSN)%'
# lokalise:
# dsn: '%env(LOKALISE_DSN)%'

Confirma y... ¡sigue adelante!

receta symfony/validator

Lo siguiente es symfony/validator. ¡Es muy sencillo! Esto movió la configuración deconfig/test/validator.yaml a la principal validator.yaml.

¡Confírmalo!

receta symfony/web-profiler-bundle

Vamos a actualizar una receta más ahora mismo: web-profiler-bundle. ¿Adivinas lo que ha hecho? Ha añadido más configuración específica del entorno. Así que la configuración dedev/web_profiler.yaml y test/web_profiler.yaml se trasladó a la principalweb_profiler.yaml. Lo mismo ocurrió con las rutas. La configuración dedev se trasladó a un nuevo config/routes/web_profiler.yaml. Vamos a confirmarlo y... ¡uf! ¡Casi lo hemos conseguido! ¡Sólo quedan dos recetas!

Vamos a actualizarlas. La receta WebpackEncoreBundle también nos dará la oportunidad de actualizar nuestro JavaScript a la nueva versión Stimulus 3.

Leave a comment!

What PHP libraries does this tutorial use?

// composer.json
{
    "require": {
        "php": "^8.0.2",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "babdev/pagerfanta-bundle": "^3.6", // v3.6.1
        "composer/package-versions-deprecated": "^1.11", // 1.11.99.5
        "doctrine/annotations": "^1.13", // 1.13.2
        "doctrine/dbal": "^3.3", // 3.3.5
        "doctrine/doctrine-bundle": "^2.0", // 2.6.2
        "doctrine/doctrine-migrations-bundle": "^3.2", // 3.2.2
        "doctrine/orm": "^2.0", // 2.11.2
        "knplabs/knp-markdown-bundle": "^1.8", // 1.10.0
        "knplabs/knp-time-bundle": "^1.18", // v1.18.0
        "pagerfanta/doctrine-orm-adapter": "^3.6", // v3.6.1
        "pagerfanta/twig": "^3.6", // v3.6.1
        "sensio/framework-extra-bundle": "^6.0", // v6.2.6
        "sentry/sentry-symfony": "^4.0", // 4.2.8
        "stof/doctrine-extensions-bundle": "^1.5", // v1.7.0
        "symfony/asset": "6.0.*", // v6.0.7
        "symfony/console": "6.0.*", // v6.0.7
        "symfony/dotenv": "6.0.*", // v6.0.5
        "symfony/flex": "^2.1", // v2.1.7
        "symfony/form": "6.0.*", // v6.0.7
        "symfony/framework-bundle": "6.0.*", // v6.0.7
        "symfony/mailer": "6.0.*", // v6.0.5
        "symfony/monolog-bundle": "^3.0", // v3.7.1
        "symfony/property-access": "6.0.*", // v6.0.7
        "symfony/property-info": "6.0.*", // v6.0.7
        "symfony/proxy-manager-bridge": "6.0.*", // v6.0.6
        "symfony/routing": "6.0.*", // v6.0.5
        "symfony/runtime": "6.0.*", // v6.0.7
        "symfony/security-bundle": "6.0.*", // v6.0.5
        "symfony/serializer": "6.0.*", // v6.0.7
        "symfony/stopwatch": "6.0.*", // v6.0.5
        "symfony/twig-bundle": "6.0.*", // v6.0.3
        "symfony/ux-chartjs": "^2.0", // v2.1.0
        "symfony/validator": "6.0.*", // v6.0.7
        "symfony/webpack-encore-bundle": "^1.7", // v1.14.0
        "symfony/yaml": "6.0.*", // v6.0.3
        "symfonycasts/verify-email-bundle": "^1.7", // v1.10.0
        "twig/extra-bundle": "^2.12|^3.0", // v3.3.8
        "twig/string-extra": "^3.3", // v3.3.5
        "twig/twig": "^2.12|^3.0" // v3.3.10
    },
    "require-dev": {
        "doctrine/doctrine-fixtures-bundle": "^3.4", // 3.4.1
        "phpunit/phpunit": "^9.5", // 9.5.20
        "rector/rector": "^0.12.17", // 0.12.20
        "symfony/debug-bundle": "6.0.*", // v6.0.3
        "symfony/maker-bundle": "^1.15", // v1.38.0
        "symfony/var-dumper": "6.0.*", // v6.0.6
        "symfony/web-profiler-bundle": "6.0.*", // v6.0.6
        "zenstruck/foundry": "^1.16" // v1.18.0
    }
}