Полный цикл в digital

События и слушатели упрощенный вариант

Если слушателей событий не много и их код не сложный, можно не создавать отдельные классы для события и его слушателя, а использовать метод boot() сервис-провайдера EventServiceProvider:

В основном контроллере, возбуждаем событие создания страницы:

app/Http/Controllers/PageController.php<?php
namespace App\Http\Controllers\Admin;
use App\Events\CreatePageEvent;
use App\Http\Controllers\Controller;
use App\Models\Page;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class PageController extends Controller {
    // Показывает список всех страниц
    public function index() {
        $pages = Page::all();
        return view('admin.page.index', compact('pages'));
    }
    
    // Показывает форму для создания страницы
    public function create() {
        return view('admin.page.create');
    }
    // Сохраняет новую страницу в базу данных
    public function store(Request $request) {
        $page = Page::create($request->all());
        // Возбуждаем событие создания страницы
        event(new CreatePageEvent($page));
        return redirect()->route('admin.page.show', ['page' => $page->id]);
    }
    // Показывает информацию о странице сайта
    public function show(Page $page) {
        return view('admin.page.show', compact('page'));
    }
    // Показывает форму для редактирования страницы
    public function edit(Page $page) {
        return view('admin.page.edit', compact('page'));
    }
    // Обновляет страницу (запись в таблице БД)
    public function update(Request $request, Page $page) {
        $page->update($request->all());
        return redirect()->route('admin.page.show', ['page' => $page->id]);
    }
    
    // Удаляет страницу (запись в таблице БД)
    public function destroy(Page $page) {
        $page->delete();
        return redirect()->route('admin.page.index');
    }
}
App/Providers/EventServiceProvider.php<?php
namespace App\Providers;
use App\Models\Page;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
class EventServiceProvider extends ServiceProvider {
    // Сопоставления события с прослушивателем для приложения @var array<class-string, array<int, class-string>>
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
    ];
    // Регистрируйте любые события для вашего приложения @return void
    public function boot() {
        parent::boot();
        Event::listen('CreatePageEvent', function (Page $page) {
            // Обрабатываем событие создания новой страницы
            $page->name .= ' (автор ' . auth()->user()->name . ')';
            $page->save();
        });
    }
    // Определите, должны ли события и прослушиватели обнаруживаться автоматически @return bool
    public function shouldDiscoverEvents()
    {
        return true;
    }
}
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг