Как выполнять код при каждой загрузке страницы, но только после запуска контроллера маршрута?

#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() {

 });