Symfony 5.1 弃用 RouteCollectionBuilder -> RoutingConfigurator
Posted
技术标签:
【中文标题】Symfony 5.1 弃用 RouteCollectionBuilder -> RoutingConfigurator【英文标题】:Symfony 5.1 Deprecation RouteCollectionBuilder -> RoutingConfigurator 【发布时间】:2020-09-23 15:12:48 【问题描述】:我正在将 Symfony 项目从 5.0 更新到 5.1
有一个弃用提示说 RouteCollectionBuilder
已弃用,应使用 RoutingConfigurator
代替。
确切的信息是
从 symfony/routing 5.1 开始: "Symfony\Component\Routing\RouteCollectionBuilder" 类是 已弃用,使用 “Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator” 而是。
这应该如何实现? 我应该更改供应商文件夹中的代码吗?
【问题讨论】:
【参考方案1】:您需要更新Kernel
类以开始使用RoutingConfigurator
而不是RouteCollectionBuilder
。
您可以通过更新配方 (composer recipes:install symfony/framework-bundle --force
) 自动完成。
【讨论】:
请注意,5.1 Kernel.php 也已更改为仅加载 yaml 配置文件。如果您碰巧使用 php 或 xml 配置文件,那么您需要进行一些额外的调整。您还可能会覆盖您可能已经对 Kernel.php 所做的任何更改。另一种方法是创建一个新的 5.1 项目,然后进行一些差异/复制/粘贴。 非常感谢您的回答。到目前为止,我没有更改 Kernel.php,所以没关系,而且我严格使用 yaml 进行配置。然而,配方更新也改变了一些我必须审查的其他文件。不过看起来很有希望:-) ....并提供另一个提示:项目目录方法已从原始内核中消失。这给我带来了问题 我花了 5 分钟才发现 RoutingConfigurator::import() 方法与之前的 RouteCollectionBuilder::import() 方法具有不同的签名。 $prefix 参数不见了 ;-)【参考方案2】:如果有人在修复此折旧时遇到问题
Since symfony/routing 5.1: The "Symfony\Component\Routing\RouteCollectionBuilder" class is deprecated, use "Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator" instead.
这是我更新的文件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);
【讨论】:
【参考方案3】:Symfony 在 GitHub 上有一个演示项目,非常适合检查此类更改,而无需创建新的本地项目。
只需查看reworked Kernel.php 并更新整个内容,而不仅仅是RoutingConfiguration
会导致其他找不到路由的错误。
【讨论】:
以上是关于Symfony 5.1 弃用 RouteCollectionBuilder -> RoutingConfigurator的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 2.8:ResourceInterface::isFresh() 自 2.8 起已弃用
Symfony 4.4 metadata_cache_driver 配置键弃用通知
sonata AdminBlockServiceInterface 弃用,以明确安装 symfony 2.8 + sonata 3.10