tol64
@tol64

Как переопределить метод handle в посреднике RequirePassword?

Приветствую.

Подскажите, пожалуйста, как в пользовательских классах переопределить метод RequirePassword::handle() из вендора (vendor\laravel\framework\src\Illuminate\Auth\Middleware\RequirePassword.php):
public function handle($request, Closure $next, $redirectToRoute = null)
    {
        if ($this->shouldConfirmPassword($request)) {
            if ($request->expectsJson()) {
                return $this->responseFactory->json([
                    'message' => 'Password confirmation required.',
                ], 423);
            }
            return $this->responseFactory->redirectGuest(
                $this->urlGenerator->route($redirectToRoute ?? 'password.confirm')
            );
        }
        return $next($request);
    }
  • Вопрос задан
  • 384 просмотра
Решения вопроса 2
Создать свой посредник в приложении, который будет наследоваться от вендорского и в нём переопределить метод. И свой же посредник подключать
Ответ написан
tol64
@tol64 Автор вопроса
Вроде бы удалось найти свой вариант (поправьте, если ошибаюсь).

Последовательность действий

Создаём одноимённого посредника (можно другое имя задать)

php artisan make:middleware RequirePassword

Добавляем в файле списков провайдеров (app\Http\Kernel.php)

…
    protected $routeMiddleware = [
        …
        'password.confirm' => \App\Http\Middleware\RequirePassword::class,
        …
    ];
…


Наследуемся от класса штатного RequirePassword и добавляем свой метод, который хотим переопределить

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Auth\Middleware\RequirePassword as RequirePasswords;

class RequirePassword extends RequirePasswords
{
    public function handle($request, Closure $next, $redirectToRoute = null)
    {
        if ($this->shouldConfirmPassword($request)) {
            if ($request->expectsJson()) {
                return $this->responseFactory->json([
                    'message' => 'Password confirmation required.',
                ], 423);
            }
            return $this->responseFactory->redirectGuest(
                $this->urlGenerator->route($redirectToRoute ?? 'password.confirm', app()->getLocale())
            );
        }
        return $next($request);
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы