Flag of Ukraine
SymfonyCasts stands united with the people of Ukraine

Actualizaciones de recetas con recipes:update

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

¡Sigamos actualizando las recetas! Hay un montón de ellas que hacer, pero la mayoría serán fáciles. Nos moveremos rápidamente, pero destacaré los cambios importantes a medida que avancemos.

actualización de la receta symfony/consola

Para la siguiente actualización, vamos a saltar a symfony/console ya que es otra importante.

composer recipes:update symfony/console

Esto actualiza sólo un archivo: bin/console. Comprueba los cambios con:

git diff --cached bin/console

Hmm. Ha pasado de ser un poco largo a ser... ¡bastante corto! Esto es, una vez más, el componente Symfony Runtime en acción. El código para arrancar Symfony para la consola se ha trasladado a symfony/runtime. Y... esto arregló nuestro comando bin/console, que estaba roto desde que actualizamos la receta de FrameworkBundle.

Confirmemos este cambio... y sigamos:

composer recipes:update

receta symfony/twig-bundle

Baja hasta symfony/twig-bundle. Es el número 7. Voy a limpiar la pantalla y... ¡bien! Tenemos conflictos. ¡Emocionante! Borraré el registro de cambios, ya que lo he mirado. Vale, esto ha borrado un archivo de configuración específico del entorno... y entonces tenemos dos conflictos. Vamos a ver config/packages/twig.yaml.

Una vez más, vemos la nueva función de configuración específica del entorno. Estas cosas dewhen@test solían vivir en config/packages/test/twig.yaml, pero ahora se han trasladado aquí. Y como tengo una configuración personalizada de form_themes, entraba en conflicto. Queremos mantener ambas cosas.

twig:
... line 2
form_themes: ['bootstrap_4_layout.html.twig']
when@test:
twig:
strict_variables: true

El segundo conflicto está en templates/base.html.twig. Nuestro base.html.twig está bastante personalizado, así que probablemente no tengamos que preocuparnos por ningún cambio nuevo. La receta añadió un nuevo favicon por defecto. Probablemente no lo utilices, ya que tendrás el tuyo propio. Para solucionar este conflicto, ya que mi proyecto no tiene todavía un favicon, copiaré lo nuevo, usaré nuestro código, pero pegaré el favicon.

... lines 1 - 2
<head>
... line 4
<title>{% block title %}Welcome!{% endblock %}</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text></svg>">
... lines 7 - 14
</head>
... lines 16 - 95

Perfecto Ahora podemos confirmar todo.

actualización de la receta doctrine/doctrine-bundle

¡Sigamos adelante!

composer recipes:update

Trabajaremos en el resto de arriba a abajo. Lo siguiente es doctrine/doctrine-bundle. Esta es una actualización genial. Una vez más, voy a limpiar la pantalla y ejecutar:

git status

Se ha producido un conflicto dentro del archivo .env... que es probablemente el cambio menos interesante. Recientemente, la receta de DoctrineBundle empezó a enviarse con PostgreSQL como base de datos por defecto. Puedes cambiarlo totalmente para que sea lo que quieras, pero PostgreSQL es un motor de base de datos tan bueno que empezamos a enviarlo como sugerencia por defecto.

Pero yo estoy usando MySQL en este proyecto, así que voy a mantenerlo. Pero para ser superguay, al menos tomaré su nueva configuración de ejemplo... que parece un poco diferente... y actualizaré mis comentarios encima con ella. Luego utilizaré mi versión del conflicto. El resultado final son unos cuantos retoques en los comentarios, pero nada más.

30 lines .env
... lines 1 - 24
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
# DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7&charset=utf8mb4"
# DATABASE_URL="postgresql://symfony:ChangeMe@127.0.0.1:5432/app?serverVersion=13&charset=utf8"
DATABASE_URL="mysql://root@127.0.0.1:3306/symfony6_upgrade?serverVersion=5.7"
... lines 29 - 30

Los otros cambios de la receta se refieren a los archivos de configuración, y seguro que puedes ver lo que ocurre. Ha eliminado dos archivos de configuración específicos del entorno y ha actualizado el principal. Hmm.

Abre config/packages/doctrine.yaml. Efectivamente, en la parte inferior vemos when@testy when@prod. ¡Qué bien! Ahora todo está en un solo archivo. Sólo asegúrate de que si tienes alguna configuración personalizada en los antiguos archivos eliminados, la trasladas a este archivo.

... lines 1 - 18
when@test:
doctrine:
dbal:
# "TEST_TOKEN" is typically set by ParaTest
dbname_suffix: '_test%env(default::TEST_TOKEN)%'
when@prod:
doctrine:
orm:
auto_generate_proxy_classes: false
... lines 29 - 43

Otro cambio nuevo es este dbname_suffix bajo when@test. Esto es genial. Cuando ejecutes pruebas, esto reutilizará automáticamente la misma configuración de conexión a la base de datos, pero con un nombre de base de datos diferente: tu nombre normal seguido de _test. Y esta parte elegante del final hace que sea muy fácil ejecutar pruebas paralelas con Paratest. Esto garantizará que cada proceso paralelo utilice un nombre de base de datos diferente. Todo esto lo consigues, de forma gratuita, gracias a la receta actualizada.

Hay otro cambio en este archivo, y es importante. En PHPStorm, puedo ver que la actualización de la receta ha eliminado la línea type: annotation. Ahora mismo, seguimos utilizando anotaciones en nuestro proyecto para la configuración de las entidades. Vamos a cambiar eso en unos minutos para utilizar los atributos de PHP 8, que va a ser increíble. Pero de todos modos, en la configuración de DoctrineBundle, ya no necesitas esta línea type: annotation. Si no la tienes, el formato correcto se detectará automáticamente. Si Doctrine ve anotaciones, cargará anotaciones; si ve atributos de PHP 8, los cargará. Así que la mejor configuración es no tenerla... lo que le dice a Doctrine que descubra las cosas por nosotros.

Una vez más, añade todos estos cambios, haz un commit, y... ¡continuemos! ¡Bueno, sigamos en el próximo capítulo, donde actualizaremos DoctrineExtensionsBundle, algunas recetas de depuración, enrutamiento, seguridad y más!

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
    }
}