阅读(325) (9)

Laravel 8 定义频道类

2021-06-30 16:36:20 更新

如果你的应用程序使用了很多不同的频道, 那么 routes/channels.php 文件将会变得很臃肿。 所以,你可以使用频道类,而不是使用闭包来授权频道。要生成频道类,使用 make:channel Artisan 命令。 此命令将在 App/Broadcasting 目录,生成一个新的频道类。

php artisan make:channel OrderChannel 

接下来,在 routes/channels.php 文件中注册你的频道:

use AppBroadcastingOrderChannel;

Broadcast::channel('order.{order}', OrderChannel::class);

最后,你可以把频道的授权逻辑,放在频道类的 join 方法中。join 方法将保留在频道授权闭包中的逻辑。 你还可以利用频道模型绑定:

<?php

namespace AppBroadcasting;

use AppModelsOrder;
use AppModelsUser;

class OrderChannel
{
    /**
     * 新建一个新的频道实例
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * 验证用户对频道的访问权限。
     *
     * @param  AppModelsUser  $user
     * @param  AppModelsOrder  $order
     * @return array|bool
     */
    public function join(User $user, Order $order)
    {
        return $user->id === $order->user_id;
    }
}

提示:和很多 Laravel 中其他类一样,频道类会被 服务容器 自动解析。 所以,你可以在构造函数中键入频道所需的任何依赖。