Skip to content

Psalm plugin that interrupt service locator usage for Laravel applications.

License

Notifications You must be signed in to change notification settings

kafkiansky/service-locator-interrupter

Repository files navigation

Psalm plugin that prevent service locator calls for Laravel applications.

test Software License Quality Score StyleCI Total Downloads Latest Stable Version

Contents:

Installation

Install this package with Composer:

PHP Version Package Version
PHP ^7.1 composer require kafkiansky/service-locator-interrupter "1.0.4" --dev
PHP ^8.0 composer require kafkiansky/service-locator-interrupter "2.0.1" --dev
PHP <= 8.1 composer require kafkiansky/service-locator-interrupter "2.1.0" --dev
PHP ^8.1 && Laravel ^10.x composer require kafkiansky/service-locator-interrupter "^4.0" --dev
PHP ^8.2 && Laravel ^11.x composer require kafkiansky/service-locator-interrupter "^5.0" --dev

WHY

Laravel-like developers prefer to use some kinds of ioc bad practices. In example: facades, helpers method, container injection and container instances creation anywhere: controllers, services, routes and even in models. You need inject necessary services in method and constructor, not call container to do it for you. Any services must has it own contract, container injection - it's not legal contract, it's hack.

This plugin can found issues of service locator usage - helpers, facades, container injection, container instances creation - and prevent them.

Even if you have your own facade, the plugin will be found it.

Even if you have inherited Container/Application classes, the plugin will be found it.

Even if you have implemented any fo ContainerInterface, the plugin also prevent that.

Dependency Injection

Replacement map

Helper(s)/Facade What you need to use instead
event,\Illuminate\Support\Facades\Event \Illuminate\Events\Dispatcher::class,\Illuminate\Contracts\Events\Dispatcher::class
info,\Illuminate\Support\Facades\Log \Illuminate\Log\LogManager::class, \Psr\Log\LoggerInterface::class
logger,\Illuminate\Support\Facades\Log \Illuminate\Log\LogManager::class, \Psr\Log\LoggerInterface::class
logs,\Illuminate\Support\Facades\Log \Illuminate\Log\LogManager::class, \Psr\Log\LoggerInterface::class
abort, abort_if, abort_unless \Illuminate\Http\Exceptions\HttpResponseException, \Symfony\Component\HttpKernel\Exception\HttpException
auth, \Illuminate\Support\Facades\Auth \Illuminate\Auth\AuthManager::class, \Illuminate\Contracts\Auth\Factory::class
back \Illuminate\Routing\Redirector
broadcast, \Illuminate\Support\Facades\Broadcast \Illuminate\Broadcasting\BroadcastManager, \Illuminate\Contracts\Broadcasting\Factory
cache, \Illuminate\Support\Facades\Cache \Illuminate\Cache\CacheManager::class, \Illuminate\Contracts\Cache\Factory::class
config, \Illuminate\Support\Facades\Config \Illuminate\Config\Repository::class, \Illuminate\Contracts\Config\Repository::class
cookie, \Illuminate\Support\Facades\Cookie \Illuminate\Cookie\CookieJar::class, \Illuminate\Contracts\Cookie\Factory::class, \Illuminate\Contracts\Cookie\QueueingFactory::class
dispatch, dispatch_now \Illuminate\Contracts\Bus\Dispatcher, \Illuminate\Bus\Dispatcher, \Illuminate\Contracts\Bus\QueueingDispatcher,
redirect, \Illuminate\Support\Facades\Redirect \Illuminate\Routing\Redirector, \Illuminate\Http\RedirectResponse
report \Illuminate\Contracts\Debug\ExceptionHandler
request, \Illuminate\Support\Facades\Request \Illuminate\Http\Request::class, \Symfony\Component\HttpFoundation\Request::class
response, \Illuminate\Support\Facades\Response \Illuminate\Contracts\Routing\ResponseFactory, \Illuminate\Routing\ResponseFactory,
route, \Illuminate\Support\Facades\Route \Illuminate\Routing\UrlGenerator::class, \Illuminate\Contracts\Routing\UrlGenerator::class,
url, \Illuminate\Support\Facades\URL \Illuminate\Routing\UrlGenerator::class, \Illuminate\Contracts\Routing\UrlGenerator::class,
session, \Illuminate\Support\Facades\Session \Illuminate\Session\SessionManager::class, \Illuminate\Session\Store::class, \Illuminate\Contracts\Session\Session::class
trans, trans_choice \Illuminate\Contracts\Translation\Translator, \Illuminate\Translation\Translator,
validator, \Illuminate\Support\Facades\Validator \Illuminate\Validation\Factory::class, \Illuminate\Contracts\Validation\Factory::class
view, \Illuminate\Support\Facades\View \Illuminate\View\Factory::class, \Illuminate\Contracts\View\Factory::class

Testing

$ composer codeception

License

The MIT License (MIT). See License File for more information.