archict / brick
Archict 框架的基础库
Requires
- php: >= 8.2
Requires (Dev)
- phpstan/phpstan: ^1.10
- slevomat/coding-standard: ^8.15
- squizlabs/php_codesniffer: ^3.9
- vimeo/psalm: ^5.22
This package is auto-updated.
Last update: 2024-09-27 11:39:31 UTC
README
要构建一些东西,你需要砖块
Archict 框架的基础库
什么是砖块?
砖块是 Archict 的基本组件。它由一组 服务 组成,这些服务可以有 配置 并可以监听 事件。
如何创建一个砖块?
在技术层面上,砖块是一个具有 archict-brick
类型的 Composer 包。创建您自己的砖块最简单的方法是使用我们的 模板。
如果您查看 composer.json
内容,您可以看到这一行
{ "type": "archict-brick" }
这一行非常重要,它告诉 Archict 您的包是一个砖块。没有它,您的服务永远不会被加载。
您还需要依赖于此包以获得创建砖块所需的全部必要类。
服务
创建一个服务相当简单,只需在您的类上放置 Service 属性即可
<?php use Archict\Brick\Service; #[Service] final class MyService {}
服务的一个功能是依赖注入。您的服务可以依赖于其他服务(例如来自其他砖块的服务)。为此,只需在构造函数中添加它们,Archict 就会为您注入它们。
<?php use Archict\Brick\Service; #[Service] final readonly class MyService { public function __construct( private AnotherService $another_service, ) {} }
服务配置
有时,您需要让服务可以通过其他开发者进行配置。为此,您可以提供配置文件。为此,您需要做几件事情。
首先,您需要创建一个数据类来存储配置变量
<?php final readonly class MyConfiguration { public function __construct( public int $nb_workers, ) {} }
请注意,只有 public
成员将被视为配置的一部分。
然后指定您的服务可以使用此类作为配置(配置的实例也可以注入到服务的构造函数中)
<?php use Archict\Brick\Service; #[Service(MyConfiguration::class)] final readonly class MyService { public function __construct( private MyConfiguration $config, ) {} }
最后,在您的包根目录的 config
文件夹中提供一个默认配置文件(YAML 格式)。除非为 Archict 提供了另一个配置文件,否则将使用此文件作为默认配置。默认情况下,文件名称与您的服务类名小写相同(myservice.yml
),您可以通过指定文件名来更改此行为
<?php use Archict\Brick\Service; #[Service(MyConfiguration::class, 'foo.yml')] final readonly class MyService { }
事件
为了给服务带来生命力,它们可以监听事件,甚至可以派发事件。
监听事件非常简单,只需将 ListeningEvent
属性添加到服务的一个公共方法中。Archict 将通过获取方法参数的类型来了解您正在监听哪个事件(因此您可以将方法命名为您想要的任何名称)
<?php use Archict\Brick\ListeningEvent; use Archict\Brick\Service; #[Service] final class MyService { #[ListeningEvent] public function fooBarBaz(MyEvent $event): void { // Do something with $event } }
派发事件需要几个步骤。首先,您需要一个事件类
<?php final class MyEvent {}
然后,将包 archict/core
添加到您的依赖中。它包含必要的 EventDispatcher
服务,这是派发事件所必需的。现在您可以在服务中使用它来派发您的事件。
<?php use Archict\Brick\Service; use Archict\Core\Event\EventDispatcher; #[Service] final readonly class MyService { public function __construct( private EventDispatcher $dispatcher, ) {} public function someMethod(): void { $this->dispatcher->dispatch(new MyEvent()); } }
如何使用砖块?
让我们去看看 Archict/core。