rector/rector-symfony

Rector 升级 Symfony 框架的规则

安装: 1,480,984

依赖者: 1

建议者: 0

安全: 0

星标: 180

关注者: 10

分支: 86

开放问题: 4

类型:rector-extension


README

查看可用的 Symfony 规则

安装

此包已经是 rector/rector 包的一部分,所以它可以直接使用。

您需要做的只是安装主包,然后就可以开始了

composer require rector/rector --dev

使用集

要添加集到您的配置中,使用 Rector\Symfony\Set\SymfonySetList 类并选择其中一个常量

use Rector\Config\RectorConfig;
use Rector\Symfony\Set\SymfonySetList;

return RectorConfig::configure()
    ->withSymfonyContainerXml(__DIR__ . '/var/cache/dev/App_KernelDevDebugContainer.xml')
    ->withSets([
        SymfonySetList::SYMFONY_62,
        SymfonySetList::SYMFONY_CODE_QUALITY,
        SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION,
    ]);

配置

提供 Symfony XML 服务列表

一些规则如 StringFormTypeToClassRector 需要访问您的 Symfony 容器导出的 XML。它包含表单类型的字符串名称列表,因此可以将它们转换为类引用。

如何添加它?检查您的 var/cache/ 目录并找到您的测试环境的 XML 文件。然后将其添加到 rector.php

use Rector\Config\RectorConfig;

return RectorConfig::configure()
    ->withSymfonyContainerXml(__DIR__ . '/var/cache/dev/App_KernelDevDebugContainer.xml');

就这样!现在您可以使用 StringFormTypeToClassRector 并安全地将您的表单类转换为引用。

提供 Symfony PHP 容器

一些规则如 AddRouteAnnotationRector 需要额外的访问您的 Symfony 容器。该规则使用容器服务 "router" 加载有关您的路由的元数据。

use Rector\Config\RectorConfig;
use Rector\Symfony\Bridge\Symfony\Routing\SymfonyRoutesProvider;
use Rector\Symfony\Configs\Rector\ClassMethod\AddRouteAnnotationRector;
use Rector\Symfony\Contract\Bridge\Symfony\Routing\SymfonyRoutesProviderInterface;

return RectorConfig::configure()
    ->withSymfonyContainerPhp(__DIR__ . '/tests/symfony-container.php')
    ->registerService(SymfonyRoutesProvider::class, SymfonyRoutesProviderInterface::class);

tests/symfony-container.php 应该提供您的依赖注入容器。您创建容器的具体方法由您决定。它可以非常简单,如下所示

// tests/symfony-container.php

use App\Kernel;

require __DIR__ . '/bootstrap.php';

$appKernel = new Kernel('test', false);
$appKernel->boot();

return $appKernel->getContainer();

您的 Symfony 版本可能相当旧。从 Symfony 2 到 6 的公共方法是稳定的,并且路由没有太大变化。该 AddRouteAnnotationRector 规则已在 Symfony 2.8 项目上进行了测试和开发。

注意:在这种情况下,容器缓存 PHP 文件位于 /var/cache/<env>/appProjectContainer.php 中不足以使用。为什么?一些服务需要设置 Kernel,例如以懒加载方式解析的路由。此容器文件仅导出没有 Kernel 的,[链接](https://github.com/symfony/symfony/issues/19840) 会因为缺少 "kernel" 错误而崩溃。这就是为什么规则需要完整的容器。


更快地学习 Rector

Rector 是一个我们开发和免费分享的工具,任何人都可以通过它节省数百小时的重构时间。但并非每个人都有时间理解 Rector 和 AST 的复杂性。您有两种方法可以加快这一过程

这两种方式都支持我们以可持续的方式通过从实际项目中学习来改进 Rector。