Estoy usando Symfony 4.3.8 y no puedo encontrar ninguna información sobre estos desaprobaciones:
Usuario obsoleto: la creación de Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy sin que su número sea consciente está en desuso y se eliminará en Doctrine ORM 3.0.
La creación de Doctrine \ ORM \ Mapping \ UnderscoreNamingStrategy sin que sea consciente del número está en desuso y se eliminará en Doctrine ORM 3.0.
Busqué en stacktrace y encontré esto:
class UnderscoreNamingStrategy implements NamingStrategy
{
private const DEFAULT_PATTERN = '/(?<=[a-z])([A-Z])/';
private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/';
/**
* Underscore naming strategy construct.
*
* @param int $case CASE_LOWER | CASE_UPPER
*/
public function __construct($case = CASE_LOWER, bool $numberAware = false)
{
if (! $numberAware) {
@trigger_error(
'Creating ' . self::class . ' without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.',
E_USER_DEPRECATED
);
}
$this->case = $case;
$this->pattern = $numberAware ? self::NUMBER_AWARE_PATTERN : self::DEFAULT_PATTERN;
}
En esta clase, el constructor siempre se llama sin parámetros, por lo que $ numberAware siempre es falso.
Esta clase se llama en un archivo que ha sido generado automáticamente por la Inyección de dependencia de Symfony, por lo que no puedo "editarlo" ...
Pensé que tal vez estaba en doctrine.yaml:
doctrine:
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
Pero no he encontrado ninguna opción para permitir que el número sea consciente :(
fuente
Respuestas:
En la mayoría de los casos, solo respondería a este tipo de preguntas con un comentario, pero sospecho que otros desarrolladores podrían encontrarse con este problema. Busqué un poco y no pude encontrar ninguna documentación explícita sobre este tema. Quizás porque DoctrineBundle está bajo el control de Doctrine y no de los desarrolladores de Symfony. O tal vez solo soy un mal buscador.
En cualquier caso, entre 4.3 y 4.4 se cambió el nombre del servicio para la estrategia de nombres de subrayado.
Y se agregó un mensaje de depreciación para advertir a los desarrolladores que cambien el nombre. Hubiera sido agradable si el mensaje fuera un poco más explícito, pero bueno. Por lo tanto, si está actualizando una aplicación existente a 4.4 y versiones posteriores, probablemente necesite editar manualmente su archivo doctrine.yaml para que el mensaje de depreciación desaparezca.
Más información (gracias @janh) sobre por qué se realizó el cambio: https://github.com/doctrine/orm/blob/2.8.x/UPGRADE.md#deprecated-number-unaware-doctrineormmappingunderscorenamingstrategy https: // github. com / doctrine / orm / issues / 7855
Todavía no está claro por qué "ellos" eligieron hacer las cosas de esta manera, pero bueno. Probablemente desee ejecutar "bin / console doctrine: schema: update --dump-sql" solo para ver si esto afecta los nombres de columna de su base de datos y ajustar en consecuencia. Los cambios han estado fuera desde hace varias semanas y no parece haber muchos aullidos de indignación por el cambio, así que supongo que la mayoría de los nombres de columna no tienen números incrustados. Hasta ahora al menos.
fuente
Para aquellos que trabajan con Symfony4.3 y aún quieren que desaparezca esta advertencia, pueden agregar agregar una nueva definición de servicio nueva en service.yaml
y cambie la configuración de doctrine.yaml de esta manera:
antes de seguir adelante confirmando este cambio, le sugiero que verifique que pasar
true
alDoctrine\ORM\Mapping\UnderscoreNamingStrategy
no afecta el comportamiento esperado de su código.Sugerencia rápida:
pasar
true
al c'tor hará que la clase use el enNUMBER_AWARE_PATTERN
lugar delDEFAULT_PATTERN
fuente