Я создал промежуточное программное обеспечение Laravel с помощью этого кода:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use App\Containers\Modals\Models\Modal;
class ModalsMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next, string $modalNames): Response
{
$modals = explode(',', $modalNames);
foreach ($modals as $modalName) {
$modal = Modal::where('slug', $modalName)->first();
if (!$modal->enabled) {
abort(404);
}
}
return $next($request);
}
}
Затем я обновил Kernel.php
:
**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array<string, class-string|string>
*/
protected $routeMiddleware = [
...,
'modals' => \App\Http\Middleware\ModalsMiddleware::class,
];
И для моей группы маршрутов я добавил следующее:
Route::group([
'prefix' => 'api/v1/routeName',
'middleware' => ['auth:api', 'modals:AModalName']
], function() {...});
Тогда я побежал:
php artisan optimize && php artisan config:cache && php artisan cache:clear && php artisan config:clear && composer dump-autoload
И остановил обслуживание, а затем перезапустил приложение.
Однако у меня была эта ошибка:
"message": "Target class [modals] does not exist.",
"exception": "Illuminate\\Contracts\\Container\\BindingResolutionException",
Как я могу это исправить?
В Laravel 11 вам необходимо зарегистрировать свое промежуточное программное обеспечение в файле bootstrap/app.php
.
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'modals' => \App\Http\Middleware\ModalsMiddleware::class,
]);
})
Для получения более подробной информации посетите официальную документацию.
Вот как выглядит полный код.
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__ . '/../routes/web.php',
commands: __DIR__ . '/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'modals' => \App\Http\Middleware\ModalsMiddleware::class,
]);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();