<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
sandermuller / laravel-fluent-validation-rector example snippets
// Before
public function rules(): array
{
return [
'email' => '0',
];
}
// After
public function rules(): array
{
return [
'email' => FluentRule::email()->
// rector.php
use Rector\Config\RectorConfig;
use SanderMuller\FluentValidationRector\Set\FluentValidationSetList;
return RectorConfig::configure()
->withPaths([__DIR__ . '/app'])
->withSets([FluentValidationSetList::ALL]);
// Just conversion, no grouping or traits
->withSets([FluentValidationSetList::CONVERT])
// Conversion + traits, skip grouping
->withSets([
FluentValidationSetList::CONVERT,
FluentValidationSetList::TRAITS,
])
// Post-migration cleanup (run separately after verifying)
->withSets([FluentValidationSetList::SIMPLIFY])
// Docblock polish (run separately after CONVERT stabilizes)
->withSets([FluentValidationSetList::POLISH])
use SanderMuller\FluentValidationRector\Rector\ValidationStringToFluentRuleRector;
use SanderMuller\FluentValidationRector\Rector\ValidationArrayToFluentRuleRector;
return RectorConfig::configure()
->withRules([
ValidationStringToFluentRuleRector::class,
ValidationArrayToFluentRuleRector::class,
]);
use SanderMuller\FluentValidationRector\Rector\ConvertLivewireRuleAttributeRector;
return RectorConfig::configure()
->withConfiguredRule(ConvertLivewireRuleAttributeRector::class, [
ConvertLivewireRuleAttributeRector::PRESERVE_REALTIME_VALIDATION => false,
]);
use Rector\Config\RectorConfig;
use SanderMuller\FluentValidationRector\Config\DocblockNarrowOptions;
use SanderMuller\FluentValidationRector\Config\HasFluentRulesTraitOptions;
use SanderMuller\FluentValidationRector\Config\LivewireConvertOptions;
use SanderMuller\FluentValidationRector\Config\RuleWrapperSimplifyOptions;
use SanderMuller\FluentValidationRector\Config\Shared\AllowlistedFactories;
use SanderMuller\FluentValidationRector\Config\Shared\BaseClassRegistry;
use SanderMuller\FluentValidationRector\Config\Shared\OverlapBehavior;
use SanderMuller\FluentValidationRector\Rector\AddHasFluentRulesTraitRector;
use SanderMuller\FluentValidationRector\Rector\ConvertLivewireRuleAttributeRector;
use SanderMuller\FluentValidationRector\Rector\SimplifyRuleWrappersRector;
use SanderMuller\FluentValidationRector\Rector\UpdateRulesReturnTypeDocblockRector;
// `AllowlistedFactories` is shared across BOTH rectors that consume it.
// Build it once and feed it to each rector's options DTO so the two stay
// in lockstep on what counts as "fluent-compatible" — configuring only
// one would leave the other running with default-empty allowlist
// (silent partial config; docblocks won't narrow on your custom factories).
$allowlist = AllowlistedFactories::none()
->withFactories(['App\\Rules\\CustomRule'])
->allowingChainTail();
return RectorConfig::configure()
->withConfiguredRule(
ConvertLivewireRuleAttributeRector::class,
LivewireConvertOptions::default()
->withMessageMigration()
->withOverlapBehavior(OverlapBehavior::Partial)
->toArray(),
)
->withConfiguredRule(
SimplifyRuleWrappersRector::class,
RuleWrapperSimplifyOptions::with($allowlist)->toArray(),
)
->withConfiguredRule(
UpdateRulesReturnTypeDocblockRector::class,
DocblockNarrowOptions::with($allowlist)->toArray(),
)
->withConfiguredRule(
AddHasFluentRulesTraitRector::class,
HasFluentRulesTraitOptions::default()
->withBaseClasses(BaseClassRegistry::of(['App\\Http\\Requests\\BaseRequest']))
->toArray(),
);