Logo   espend.de
Missing ConstraintViolationList findByCodes()
ConstraintViolationListFindByCodesInspection
2026-09-13
Inspection PHP Paid

Reports concrete ConstraintViolationListInterface implementations without findByCodes(), deprecated in Symfony 8.1. Includes anonymous classes.

Missing method:

class CustomViolationList implements ConstraintViolationListInterface
{
    // Other interface methods omitted.
    // findByCodes() is missing.
}
Conflicting from_callable service options
FromCallableOptionInspection
2026-09-13
Inspection Yaml Paid

Reports YAML service options incompatible with from_callable, deprecated in Symfony 8.1.

Checks alias, parent, synthetic, file, arguments, properties, configurator, and calls.

Conflicting arguments:

services:
    app.callback:
        from_callable: ['App\Factory', 'create']
        arguments: ['@logger'] # deprecated with from_callable
Deprecated grouped controller attributes
HttpKernelEventArgumentInspection
2026-09-13
Inspection PHP Paid

Reports grouped attributes in ControllerEvent::setController(), deprecated in Symfony 8.1. Pass a flat list.

Grouped by attribute class:

$event->setController($controller, [Cache::class => [new Cache()]]);

Flat attribute list:

$event->setController($controller, [new Cache()]);
Conflicting Console input modes
ConsoleInputModeInspection
2026-09-12
Inspection PHP Paid

Reports conflicting InputArgument and InputOption base modes deprecated in Symfony 8.1.

Conflicting modes:

new InputArgument('file', InputArgument::REQUIRED | InputArgument::OPTIONAL);
new InputOption('format', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_OPTIONAL);

Use one base mode:

new InputArgument('file', InputArgument::REQUIRED);
new InputOption('format', null, InputOption::VALUE_OPTIONAL);
Deprecated Filesystem mirror option
FilesystemMirrorCopyOnWindowsInspection
2026-09-12
Inspection PHP Paid

Reports copy_on_windows in literal mirror() options, deprecated in Symfony 8.1. Quick-fix renames it to follow_symlinks, preserving the value.

Deprecated option:

$filesystem->mirror($from, $to, options: ['copy_on_windows' => true]);

After quick-fix:

$filesystem->mirror($from, $to, options: ['follow_symlinks' => true]);
Deprecated Request/Response property writes
HttpFoundationPropertyWriteInspection
2026-09-12
Inspection PHP Paid

Reports direct Request bag and Response header assignments deprecated in Symfony 8.1.

Deprecated assignments:

$request->attributes = new ParameterBag(['locale' => 'en']);
$response->headers = new ResponseHeaderBag(['X-Request-Id' => '123']);

Use constructor arguments:

$request = new Request(attributes: ['locale' => 'en']);
$response = new Response(headers: ['X-Request-Id' => '123']);
Quick Documentation for Symfony routes
RouteDocumentationTargetProvider
2026-09-12
Documentation Routing PHP Twig Find Usages

Shows route path, methods, defaults, requirements, controller, and Twig usage count. Includes Find Usages.

Route declaration:

use Symfony\Component\Routing\Attribute\Route;

#[Route('/products/{id}', name: 'app_product_show', requirements: ['id' => '\d+'], methods: ['GET'])]
public function show(int $id): Response
{
    // ...
}

Route references:

$this->generateUrl('app_product_show', ['id' => 42]);
{{ path('app_product_show', {id: 42}) }}
{{ url('app_product_show', {id: 42}) }}
Deprecated tagged collection default methods
TaggedCollectionDefaultMethodInspection
2026-09-12
Inspection PHP Paid

Reports deprecated tagged iterator and locator defaults on constructor parameters in Symfony 8.1. Set index and priority with #[AsTaggedItem].

Default priority method:

final class HandlerRegistry
{
    public function __construct(
        #[AutowireIterator('app.handler', defaultPriorityMethod: 'getDefaultPriority')]
        private iterable $handlers,
    ) {}
}

final class ExampleHandler
{
    public static function getDefaultPriority(): int { return 100; }
}

Use AsTaggedItem:

final class HandlerRegistry
{
    public function __construct(
        #[AutowireIterator('app.handler')]
        private iterable $handlers,
    ) {}
}

#[AsTaggedItem(priority: 100)]
final class ExampleHandler {}
Quick Documentation for Twig templates
TwigTemplateDocumentationTargetProvider
2026-09-12
Documentation Twig PHP Find Usages

Shows template paths, inheritance, PHP callers, and Twig usage counts. Includes Find Usages.

PHP render call:

return $this->render('product/show.html.twig', [
    'product' => $product,
]);

Twig references:

{% extends 'base.html.twig' %}

{% block body %}
    {% include 'product/_details.html.twig' with {product: product} %}
{% endblock %}
Vite and Reprise entry completion
ViteGotoCompletionRegistrar
2026-09-09

Completion Twig Navigation

Entry completion and navigation in Vite and Reprise Twig functions.

Supported Twig functions:

{{ vite_entry_link_tags('app') }}
{{ vite_entry_script_tags('app') }}

{{ reprise_entry_script_tags('app') }}
{{ reprise_entry_link_tags(entryName: 'app') }}
{% set js = reprise_entry_js_files('app') %}
{% set css = reprise_entry_css_files('app') %}
{% if reprise_entry_exists('app') %}...{% endif %}
Find Usages for Symfony form fields
FormFieldReferencesSearchExecutor
2026-09-07

Other PHP Form Find Usages

Find Usages on PHP properties and getters/setters includes matching form fields mapped via data_class.

Find Usages on Product::$title:

class Product {
    public string $title;
}

Matching field in ProductType:

// configureOptions()
$resolver->setDefaults(['data_class' => Product::class]);

// buildForm()
$builder->add('title');
Symfony Profiler request details MCP tool
ProfilerRequestDetailsMcpToolset
2026-08-16
MCP Profiler PHP

Shows request, logs, events, timing, memory, Twig, Doctrine, and translation details. Use latest for the newest request.

Doctrine collector:

get_symfony_profiler_details(
    hash: 'latest',
    collector: 'db',
    page: 1
)
Quick Documentation for Twig component props
TwigComponentAttributeDocumentationProvider
2026-07-05
Documentation Twig UX HTML Type

Shows prop type, description, and default value in Quick Documentation for Twig component attributes.

Component template:

{% props
    ## 'default'|'destructive' The visual style variant.
    variant = 'default'
%}

{## The alert body. #}
{% block content %}{% endblock %}

Open Quick Documentation on variant:

<twig:Alert variant="destructive" />
Twig component prop completion with types
TwigComponentPropCompletion
2026-07-05

Completion Twig UX HTML Type

Completes Twig component props with types from ## documentation comments.

Component template:

{% props
    ## 'default'|'destructive' The visual style variant.
    variant = 'default'
%}

{## The alert body. #}
{% block content %}{% endblock %}

Component usage:

<twig:Alert <caret> />
<twig:Alert :<caret> />