- Notifications
You must be signed in to change notification settings - Fork103
Rector upgrade rules for Symfony
License
rectorphp/rector-symfony
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
See availableSymfony rules
This package is already part ofrector/rector package, so it works out of the box.
All you need to do is install the main package, and you're good to go:
composer require rector/rector --dev
To add a set to your config, useRector\Symfony\Set\SymfonySetList class and pick one of constants:
useRector\Config\RectorConfig;useRector\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, ]);
Some rules likeStringFormTypeToClassRector need access to your Symfony container dumped XML. It contains list of form types with their string names, so it can convert them to class references.
How to add it? Check yourvar/cache/ directory and find the XML file for your test env. Then add it inrector.php:
useRector\Config\RectorConfig;return RectorConfig::configure() ->withSymfonyContainerXml(__DIR__ .'/var/cache/dev/App_KernelDevDebugContainer.xml');
That's it! Now you can run theStringFormTypeToClassRector and get your form classes converted safely.
Some rules likeAddRouteAnnotationRector require additional access to your Symfony container. The rule takes container service "router" to load metadata about your routes.
useRector\Config\RectorConfig;useRector\Symfony\Bridge\Symfony\Routing\SymfonyRoutesProvider;useRector\Symfony\Configs\Rector\ClassMethod\AddRouteAnnotationRector;useRector\Symfony\Contract\Bridge\Symfony\Routing\SymfonyRoutesProviderInterface;return RectorConfig::configure() ->withSymfonyContainerPhp(__DIR__ .'/tests/symfony-container.php') ->registerService(SymfonyRoutesProvider::class, SymfonyRoutesProviderInterface::class);
Thetests/symfony-container.php should provide your dependency injection container. The way you create the container is up to you. It can be as simple as:
// tests/symfony-container.phpuseApp\Kernel;require__DIR__ .'/bootstrap.php';$appKernel =newKernel('test',false);$appKernel->boot();return$appKernel->getContainer();
The version of your Symfony can be quite old. Public methods are stable from Symfony 2 to through 6 and the router have not changed much. TheAddRouteAnnotationRector rule was tested and developed on Symfony 2.8 project.
Note
In this case, container cache PHP file located in/var/cache/<env>/appProjectContainer.php is not enough. Why? Few services require Kernel to be set, e.g. routes that are resolved in lazy way. This container file is only dumped without Kernel andwould crash with missing "kernel" error. That's why the rule needs full blown container.
Rector is a tool thatwe develop and share for free, so anyone can save hundreds of hours on refactoring. But not everyone has time to understand Rector and AST complexity. You have 2 ways to speed this process up:
- read a book -The Power of Automated Refactoring
- hire our experienced team toimprove your code base
Both ways support us to and improve Rector in sustainable way by learning from practical projects.
About
Rector upgrade rules for Symfony
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.