Skip to content

Rector rules for updating plugins and modules to Craft CMS 4.

Notifications You must be signed in to change notification settings

craftcms/rector

Folders and files

NameName
Last commit message
Last commit date
Aug 30, 2022
Aug 25, 2023
Mar 8, 2024
Mar 7, 2024
Sep 29, 2023
Mar 8, 2024
Feb 28, 2022
Mar 1, 2022
Mar 7, 2024
May 17, 2024
Aug 25, 2023
Aug 25, 2023
Mar 8, 2024
Aug 25, 2023

Repository files navigation

Rector Rules for Craft CMS

This package provides Rector rules for updating Craft CMS plugins and modules for:

Craft CMS 3 → 4

First, ensure Craft 3.7.35 or later is Composer-installed. (Prior versions of Craft weren’t compatible with Rector.)

composer update craftcms/cms 

Then run the following commands:

composer require php:^8.0.2 --ignore-platform-reqs
composer config minimum-stability dev
composer config prefer-stable true
composer require craftcms/rector:dev-main --dev --ignore-platform-reqs
vendor/bin/rector process src --config vendor/craftcms/rector/sets/craft-cms-40.php

If you have code that extends Craft Commerce classes, you can run the following command as well:

vendor/bin/rector process src --config vendor/craftcms/rector/sets/craft-commerce-40.php

Once Rector is complete, you’re ready to update craftcms/cms.

composer require craftcms/cms:^4.0.0-alpha -W --ignore-platform-reqs

Craft CMS 4 → 5

Run the following commands:

composer require php:^8.2 --ignore-platform-reqs
composer config minimum-stability dev
composer config prefer-stable true
composer require craftcms/rector:dev-main --dev --ignore-platform-reqs
vendor/bin/rector process src --config vendor/craftcms/rector/sets/craft-cms-50.php

Once Rector is complete, you’re ready to update craftcms/cms:

composer require craftcms/cms:^5.0.0-beta.1 -W --ignore-platform-reqs

Notes

Advanced Configuration

If you’d like to include additional Rector rules, or customize which files/directories should be processed, you’ll need to give your project a rector.php file.

Here’s an example which runs the Craft 4 rule set, but skips over a src/integrations/ folder:

<?php
declare(strict_types = 1);

use craft\rector\SetList as CraftSetList;
use Rector\Core\Configuration\Option;
use Rector\Config\RectorConfig;

return static function(RectorConfig $rectorConfig): void {
    // Skip the integrations folder
    $rectorConfig->skip([
        __DIR__ . '/src/integrations',
    ]);

    // Import the Craft 4 upgrade rule set
    $rectorConfig->sets([
        CraftSetList::CRAFT_CMS_40
    ]);
};

About

Rector rules for updating plugins and modules to Craft CMS 4.

Topics

Resources

Code of conduct

Security policy

Stars

Watchers

Forks

Languages