如何派遣事件和过程返回值
您需要运行一个或多个听众的事件,在您的主要代码中,您希望在听众完成工作后检索一些值。
在下面的示例中,我们将解雇SampleEvent
类和他的SampleListener
。这个想法是初始化employee
。
文件app/Providers/EventServiceProvider.php
protected $listen = [
SampleEvent::class => [
SampleListener::class,
],
];
对于我们的样本,您的routes/web.php
看起来像这样:
use App\Employee;
use App\Events\SampleEvent;
Route::get('/', function () {
$employee = new Employee();
SampleEvent::dispatch($employee);
echo 'FIRSTNAME is ' . $employee->getFirstName() . PHP_EOL;
echo 'NAME is ' . $employee->getLastName() . PHP_EOL;
echo 'PSEUDO is ' . $employee->getPseudo() . PHP_EOL;
});
我们要做的是:
- 创建一个基于
Employee
类的新employee
, - 致电我们的
SampleEvent
活动,并给我们的新employee
, - 让魔术发生,
- 显示员工的名字和姓氏。
在这里,默认情况下,我们的员工。
文件应用程序/雇员.php
此课程将初始化我们的员工并提供集合者和Getters。
默认情况下,我们的员工将被称为John Doe (cavo789)
。
<?php
namespace App;
class Employee
{
public function __construct(
private string $firstname = 'John',
private string $lastname = 'Doe',
private string $pseudo = 'cavo789'
) {
}
public function getFirstName(): string
{
return $this->firstname;
}
public function setFirstName(string $firstname)
{
$this->firstname = $firstname;
return $this;
}
public function getLastName(): string
{
return $this->lastname;
}
public function setLastName(string $lastname)
{
$this->lastname = $lastname;
return $this;
}
public function getPseudo(): string
{
return $this->pseudo;
}
public function setPseudo(string $pseudo)
{
$this->pseudo = $pseudo;
return $this;
}
};
文件应用程序/events/sampleevent.php
我们的活动将接收员工并将其私下。
让三个设定器公开以允许听众更新名字和姓氏。还允许初始化伪。
<?php
namespace App\Events;
use App\Employee;
use Illuminate\Foundation\Events\Dispatchable;
class SampleEvent
{
use Dispatchable;
public function __construct(private Employee $employee)
{
}
public function setFirstName(string $firstname): self
{
$this->employee->setFirstName($firstname);
return $this;
}
public function setLastName(string $lastname): self
{
$this->employee->setLastName($lastname);
return $this;
}
public function setPseudo(string $pseudo): self
{
$this->employee->setPseudo($pseudo);
return $this;
}
}
文件应用程序/侦听器/samplelistener.php
我们的听众逻辑。 SampleListener
将接收SampleEvent
作为参数,因此可以访问其所有公共方法。我们在这里更新第一个和最后一个名称,我们将不更新伪。
<?php
namespace App\Listeners;
use App\Events\SampleEvent;
class SampleListener
{
public function handle(SampleEvent $event): void
{
$event->setFirstName('Georges')->setLastName('Washington');
}
}
结果
如果我们在控制台中运行curl localhost
,我们将在下面的输出中显示出它按预期运行的完美工作。
FIRSTNAME is Georges
NAME is Washington
PSEUDO is cavo789
如果我们编辑app/Providers/EventServiceProvider.php
文件并像下面的图表一样对侦听器进行评论,我们的代码仍然可以正常工作
protected $listen = [
SampleEvent::class => [
// SampleListener::class,
],
];
FIRSTNAME is John
NAME is Doe
PSEUDO is cavo789
照片来源:Jason Rosewell上的Unsplash