与Laravel活动合作
#教程 #php #laravel #tips

如何派遣事件和过程返回值

您需要运行一个或多个听众的事件,在您的主要代码中,您希望在听众完成工作后检索一些值。

在下面的示例中,我们将解雇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;
});

我们要做的是:

  1. 创建一个基于Employee类的新employee
  2. 致电我们的SampleEvent活动,并给我们的新employee
  3. 让魔术发生,
  4. 显示员工的名字和姓氏。

在这里,默认情况下,我们的员工。

文件应用程序/雇员.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