marcbln / symfony-facades
使用外观类调用 Symfony 服务。
Requires
- psr/container: >=1.0.0
- symfony/framework-bundle: 4.*|5.*|6.*|7.*
Requires (Dev)
- nyholm/symfony-bundle-test: ^1.8
- php-coveralls/php-coveralls: ^2.4
- phpunit/phpcov: ^8.2
- phpunit/phpunit: ^9.5
- symfony/phpunit-bridge: ^4.4
- symfony/test-pack: ^1.0
This package is auto-updated.
Last update: 2024-09-29 21:34:43 UTC
README
这是一个来自 lagdo/symfony-facades 的分支,支持 symfony 6。
Symfony 服务的外观类
使用此包,可以通过静态方法语法调用 Symfony 服务。
这是将服务作为参数传递给其他类的构造函数或使用懒加载服务的更简单替代方案。当类依赖于许多服务,但只偶尔调用每个服务时,这特别有趣。
安装
使用 composer
安装此包。
composer require marcbln/symfony-facades
如果项目不使用 Symfony Flex,则在 src/Kernel.php
文件中注册 Marcbln\Symfony\Facades\FacadesBundle
包。
使用方法
外观类继承自 Marcbln\Symfony\Facades\AbstractFacade
抽象类,并实现了 getServiceIdentifier()
方法,该方法返回对应服务的 ID。
namespace App\Facades; use App\Services\MyService; use Marcbln\Symfony\Facades\AbstractFacade; class MyFacade extends AbstractFacade { /** * @inheritDoc */ protected static function getServiceIdentifier() { return MyService::class; } }
现在可以通过 App\Facades\MyFacade
外观类调用 App\Services\MyService
服务的方法,如下所示。
class TheService { public function theMethod() { MyFacade::myMethod(); } }
而不是这样做。
class TheService { /** * @var MyService */ protected $myService; public function __construct(MyService $myService) { $this->myService = $myService; } public function theMethod() { $this->myService->myMethod(); } }
使用服务定位器
上面的外观类仅适用于声明为公共的服务。
要在 config/services.yaml
文件中创建私有服务的外观类,必须声明服务定位器。请参阅 Symfony 服务定位器文档。
在以下示例中,将 Twig
服务传递给服务定位器。
marcbln.facades.service_locator: public: true class: Symfony\Component\DependencyInjection\ServiceLocator tags: ['container.service_locator'] arguments: - Twig\Environment: '@twig'
然后可以为 Twig
服务定义外观类。
namespace App\Facades; use Twig\Environment; use Marcbln\Symfony\Facades\AbstractFacade; class View extends AbstractFacade { /** * @inheritdoc */ protected static function getServiceIdentifier() { return Environment::class; } }
现在可以使用外观类渲染模板。
use App\Facades\View; class TheService { public function theMethod() { ... $html = View::render($template, $vars); ... } }
提供的外观类
此包为一些 Symfony 服务提供了外观类。
日志记录器
必须在 config/services.yaml
文件中将 logger
服务传递给服务定位器。
marcbln.facades.service_locator: public: true class: Symfony\Component\DependencyInjection\ServiceLocator tags: ['container.service_locator'] arguments: - Psr\Log\LoggerInterface: '@logger'
现在可以使用外观类记录消息。
use Marcbln\Symfony\Facades\Log; Log::info($message, $vars);
视图
必须在 config/services.yaml
文件中将 twig
服务传递给服务定位器。
marcbln.facades.service_locator: public: true class: Symfony\Component\DependencyInjection\ServiceLocator tags: ['container.service_locator'] arguments: - Twig\Environment: '@twig'
现在可以使用外观类渲染视图。
use Marcbln\Symfony\Facades\View; $html = View::render($template, $vars);
贡献
- 问题跟踪器:github.com/marcbln/symfony-facades/issues
- 源代码:github.com/marcbln/symfony-facades
许可协议
此包采用 3-Clause BSD 许可协议。