slam/phpstan-laminas-framework

Laminas Framework 3 MVC controller plugin extension for PHPStan.

Installs: 183 048

Dependents: 6

Suggesters: 0

Security: 0

Stars: 16

Watchers: 5

Forks: 12

Open Issues: 10

Type:phpstan-extension

v2.0.0 2024-11-27 07:23 UTC

README

Latest Stable Version Downloads Integrate Code Coverage

This extension provides following features:

  1. Provide correct return type for $container->get() calls on containers of type \Laminas\ServiceManager\ServiceLocatorInterface, \Interop\Container\ContainerInterface or \Psr\Container\ContainerInterface
  2. Handle controller plugins that are called using magic __call() in subclasses of \Laminas\Mvc\Controller\AbstractController
  3. Provide correct return type for plugin method of AbstractController, FilterChain, PhpRenderer and ValidatorChain
  4. getApplication(), getRenderer(), getRequest() and getResponse() methods on Controllers, MvcEvents, View, ViewEvent and Application returns the real instance instead of type-hinted interfaces
  5. getView() method on \Laminas\View\Helper\AbstractHelper returns the real Renderer instance instead of type-hinted interface
  6. \Laminas\Stdlib\ArrayObject is configured as a Universal object crate
  7. Handle \Laminas\Stdlib\AbstractOptions magic properties

Installation

To use this extension, require it in Composer:

composer require --dev slam/phpstan-laminas-framework

If you also install phpstan/extension-installer then you're all set!

Manual installation

If you don't want to use phpstan/extension-installer, include extension.neon in your project's PHPStan config:

includes:
    - vendor/slam/phpstan-laminas-framework/extension.neon

Configuration

This library already recognize built-in services and plugins.

You can opt in for more advanced analysis by providing the service manager from your own application:

parameters:
    laminasframework:
       serviceManagerLoader: tests/service-manager.php

For example, tests/service-manager.php would look something like this:

$app = \Laminas\Mvc\Application::init($config);
return $app->getServiceManager();