laravel / lumen abort продолжить выполнение промежуточного программного обеспечения - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть маршрут с некоторыми пользовательскими промежуточными программами и контроллер, подключенный к этому маршруту.

Когда я попадаю в свой контроллер, мне нужно проверить пользовательский объект (переданный в запросе), чтобы прервать действие контроллера, если это необходимо.

public function myControllerFunction(Request $request){
...

    if(isset($data["data-key"])){
       abort(Response::HTTP_BAD_REQUEST, "custom abort message");
    }
...
//do other call

}

Запущено действие отмены, я вижу его в своем журнале с соответствующим сообщением, НО промежуточное ПО продолжает выполнение и попадает в другую ошибку (из-за прерывания в контроллере, которое прерывается перед вызовом другогометод).Поэтому первоначальное сообщение об ошибке ответа перезаписывается.

Моя цель - остановить выполнение моего кода в контроллере и остановить выполнение промежуточного программного обеспечения, установленного как «после».Я ожидал, что прерывание отменит все выполнение кода.

Я попытался с throw Exception(…), но результат тот же, с пользовательским исключением, но безуспешно.Я также попытался с помощью кода в стиле фанк в промежуточном программном обеспечении (где я проверяю, есть ли уже сообщение об ошибке или исключение в запросе), но это не правильно делать в этом месте.

Почемупрерывание, не отменяющее выполнение кода?


для получения дополнительной информации мой маршрутизатор выглядит следующим образом:

$router->post(
      'path',
       [
          'as' => 'element.functionName',
          'uses'=>'ElementResourceController@myControllerFunction',
          'middleware' => [
             'middleware-before-1',
             'middleware-before-2',
             'middleware-before-3',
             'middleware-after-1',
             'middleware-after-2',
             'middleware-after-3'
          ],
       ]
 );

my before middleware выглядит следующим образом

public function handle(Request $request, Closure $next){

    // do things
    if(this){
        //do that
    }

    return $next($request);
}

мое промежуточное ПО

public function handle(Request $request, Closure $next){
    $resp = $next($request);
    ///do things

    //other error at this line, because abort in controller did not work as expected
    //this middleware should not be executed
    $element = Element::findOrFail($resp->getData()->key); 

    return $resp;
}
...