#laravel
#laravel
Вопрос:
Я работаю над проектом на базе Laravel, и мне нужно выполнить некоторый «базовый» php-код при каждой загрузке страницы. До сих пор я помещал свой код в boot() из AppServiceProvider. Это работает хорошо, но мне нужно выполнить мой «базовый» код только после того, как код из контроллера маршрута уже выполнен.
Я уже искал в официальных документах laravel, но я все еще не понял, как это сделать.
Вот как выглядит мой маршрут:
Route::match(['get', 'post'], '/profile/email/{profile_id?}', 'profileController@profileHandleEmail')->name('profile/email');
Результат, которого я хочу достичь, — выполнить код из ProfileController@profileHandleEmail перед «базовым» кодом из AppServiceProvider.
Какой был бы лучший способ сделать это? Я предполагаю, что это не может быть достигнуто с помощью AppServiceProvider.
Комментарии:
1. Вы можете запускать свой php-код в layout.blade.php файл
2. Взгляните на промежуточные программы. Вы можете создать глобальное промежуточное программное обеспечение after laravel.com/docs/5.8/middleware#global-middleware
Ответ №1:
Предлагаемый способ добиться желаемого — использовать промежуточное программное обеспечение:
Выполнить php artisan make:middleware PostProcess
Он должен генерировать класс промежуточного программного обеспечения под AppHttpMiddleware
class PostProcess {
public function handle($request, $next) {
$response = $next($request);
// Run you code here.
return $response
}
}
Затем измените свое AppHttpKernel.php
промежуточное программное обеспечение:
protected $middleware = [
//Existing entries
AppHttpMiddlewarePostProcess::class
];
Это промежуточное программное обеспечение будет запущено после генерации ответа, но до того, как ответ будет отправлен клиенту. Если вы хотите запустить код после отправки ответа клиенту, вы можете использовать завершаемое промежуточное программное обеспечение
class PostProcess {
public function handle($request, $next) {
return $next($request);
}
public function terminate($request, $response) {
//Your code here
}
}
Ответ №2:
Шаг 1: Создание промежуточного программного обеспечения
php artisan make:middleware PostProcess
Шаг 2: Создайте код, который вам нужен
class PostProcess {
public function handle($request, $next) {
if(condition){
you code here
}
return $next($request);
}
}
Шаг 3: вызовите промежуточное программное обеспечение в kernel.php
protected $routeMiddleware = [
'admin' => AppHttpMiddlewarePostProcess::class,
];
Шаг 4: вызовите промежуточное программное обеспечение в файле маршрута
Route::group(['middleware' => 'admin'], function() {
});