Laravel 文件管理器 - 创建文件夹或文件事件

问题描述

我已将 Unisharp/Laravel-filemanager 用于我的文件管理器系统。当用户创建文件夹时,我需要一个 事件调用函数。我该怎么做?

我试图在他们的网站 Laravel File manager events 上找到有关它的一些信息,但找不到任何对我有帮助的信息。你对我有什么解决方案或建议吗?

解决方法

我检查了 Unisharp/Laravel-filemanager 包,没有相关事件,即 FolderCreated,这里是 list of all events that package works with,因此您必须使用以下步骤定义自定义事件:

第 1 步:创建您的自定义事件

php artisan make:event FolderCreatedByUser

第 2 步:

在事件类中定义对用户和文件夹的引用:

class FolderCreatedByUser
{
    use Dispatchable,InteractsWithSockets,SerializesModels;

    public $folder;
    public $user;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(User $user,$folder)
    {
        $this->user = $user;
        $this->folder= $folder;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('user_folders');
    }
}

第 3 步:

FolderCreatedByUser 事件添加监听器:

php artisan make:listener UserFolderCreationListener

<?php

namespace App\Listeners;

use App\Events\FolderCreatedByUser;

class UserFolderCreationListener
{
    /**
     * Handle the event.
     *
     * @param object $event
     * @return void
     */
    public function handle(FolderCreatedByUser $event)
    {
        $user = $event->user;
        $folder = $event->folder;
        // call your function here!
    }
}

第 4 步: 打开 app/Providers/EventServiceProvider 并注册事件的监听器:

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [

        FolderCreatedByUser::class => [
            UserFolderCreationListener::class
        ],.
        .
        .

最后一步

当用户创建一个新文件夹时,调度一个事件:

FolderCreatedByUser::dispatch(auth()->user(),$folder);