Symfony 5.1 弃用 RouteCollectionBuilder -> RoutingConfigurator

use*_*145 7 updates symfony deprecation-warning symfony5

我正在将 Symfony 项目从 5.0 更新到 5.1 有一个弃用提示说RouteCollectionBuilder已弃用,RoutingConfigurator应改为使用。

确切的消息是

由于 symfony/routing 5.1: "Symfony\Component\Routing\RouteCollectionBuilder" 类已被弃用,请改用 "Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator"。

这应该如何实施?我应该更改供应商文件夹中的代码吗?

小智 19

您需要更新Kernelclass 以开始使用RoutingConfigurator而不是RouteCollectionBuilder.

您可以通过更新配方 ( composer recipes:install symfony/framework-bundle --force)来自动执行此操作。

  • 我花了 5 分钟才发现 RoutingConfigurator::import() 方法与之前的 RouteCollectionBuilder::import() 方法具有不同的签名。$prefix 参数消失了;-) (2认同)

arn*_*rno 14

如果有人在修复此折旧时遇到问题

Since symfony/routing 5.1: The "Symfony\Component\Routing\RouteCollectionBuilder" class is deprecated, use "Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator" instead.
Run Code Online (Sandbox Code Playgroud)

这是我更新的文件src/Kernel.php

<?php

namespace App;

use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;

class Kernel extends BaseKernel
{
    use MicroKernelTrait;

    protected function configureContainer(ContainerConfigurator $container): void
    {
        $container->import('../config/{packages}/*.yaml');
        $container->import('../config/{packages}/'.$this->environment.'/*.yaml');

        if (is_file(\dirname(__DIR__).'/config/services.yaml')) {
            $container->import('../config/services.yaml');
            $container->import('../config/{services}_'.$this->environment.'.yaml');
        } elseif (is_file($path = \dirname(__DIR__).'/config/services.php')) {
            (require $path)($container->withPath($path), $this);
        }
    }

    protected function configureRoutes(RoutingConfigurator $routes): void
    {
        $routes->import('../config/{routes}/'.$this->environment.'/*.yaml');
        $routes->import('../config/{routes}/*.yaml');

        if (is_file(\dirname(__DIR__).'/config/routes.yaml')) {
            $routes->import('../config/routes.yaml');
        } elseif (is_file($path = \dirname(__DIR__).'/config/routes.php')) {
            (require $path)($routes->withPath($path), $this);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Ric*_*ins 5

从 Symfony 5.4 开始,根据 symfony/framework-bundle 配方,Kernel.php 可以为空,如下所示:

<?php

namespace App;

use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\HttpKernel\Kernel as BaseKernel;

class Kernel extends BaseKernel
{
    use MicroKernelTrait;
}
Run Code Online (Sandbox Code Playgroud)

源配方: https://github.com/symfony/recipes/blob/master/symfony/framework-bundle/5.4/src/Kernel.php

由于某种原因,应用配方 ( composer recipes:install symfony/framework-bundle --force) 并没有更新内核文件。但通过将其替换为上述内容,对我有用并修复了弃用警告。