maslosoft/signals

无线跨组件通信

4.0.5 2023-06-16 07:18 UTC

README

Signals Logo Maslosoft Signals

无线跨组件通信

Latest Stable Version License Scrutinizer Code Quality Code Coverage

快速安装

composer require maslosoft/signals

文档

完整 Signals 文档

连接组件

各种应用程序组件必须相互连接。这应该以一种软方式完成,以便在添加或删除组件代码时不需要更改。

无线连接

Signals 提供类似无线连接的组件。其中之一发出信号,另一个接收它。这也可以反过来进行。一个应用程序组件发送信号,而几个组件则监听该信号。

无线跨组件通信

此组件允许应用程序组件之间的交互,无需先前的或明确的分配。

设置

使用 composer 进行安装

composer require maslosoft/signals:"*"

或者通过硬方法,在项目中的某处下载并确保自动加载对 Maslosoft\Signals\* 的工作正常,并且你也包括依赖项;

设置信号。在调用 init 之后,任何进一步的实例都将按照下面的 $signal 进行配置。

$signal = new Maslosoft\Signals\Signal();
$signal->runtimePath = RUNTIME_PATH;
$signal->paths = [
	MODELS_PATH
];
$signal->init();

生成信号定义,仅一次,将其连接到您的构建脚本等。

$signal = new Maslosoft\Signals\Signal();
(new Maslosoft\Signals\Utility($signal))->generate();

使用方法

发出信号

定义信号

namespace MyNamespace\Signals;

class AccountMenuItems extends AdminMenuItems
{
	public $item = [];
}

使用 @SlotFor 注解定义具有槽的类

namespace Maslosoft\Ilmatar\Modules;

class MyModule
{
	/**
	 * @SlotFor(MyNamespace\Signals\AccountMenuItems)
	 */
	public function reactOnAccountMenu(MyNamespace\Signals\AccountMenuItems $signal)
	{
		$signal->item = [
			'url' => '/content/myBlog',
			'label' => 'My blog'
		];
	}
}

发出信号并获取此调用的结果

$signal = new Maslosoft\Signals\Signal();
$result = $signal->emit(new AdminMenuItems());

echo $result[0]->item[0]['label']; // My blog

收集信号