2016-07-05 6 views
0

Я пытаюсь выполнить JSON-схемы валидатор от justinrainbow, как связующего в Слим 3.Слим 3 промежуточного проверки

  1. Я не могу понять, как получить входные данные клиентов из запросов GET/POST в промежуточное программное обеспечение. пытался так:

    $mw = function ($request, $response, $next) { 
        $data = $request->getParsedBody(); 
        print_r($data); // prints nothing 
        $id = $request->getAttribute('loan_id'); 
        print_r($id); // prints nothing 
    
        // here I need to validate the user input from GET/POST requests with json-schema library and send the result to controller 
        $response = $next($request, $response); 
        return $response; 
    }; 
    
    $app->get('/loan/{loan_id}', function (Request $request, Response $response) use ($app, $model) { 
        $loanId = $request->getAttribute('loan_id'); // here it works 
        $data = $model->getLoan($loanId); 
        $newResponse = $response->withJson($data, 201); 
    
        return $newResponse; 
    })->add($mw); 
    
  2. Есть 2 возможных способа, как мне это нужно. что я делаю неправильно?

    1. проверить его в промежуточном программном обеспечении и отправить некоторый массив/JSON ответ на контроллер, который я затем получить как я понял с $data = $request->getParsedBody();

    2. проверить его в промежуточном программном обеспечении, но окончательная проверка буду в контроллере, как это :

      $app->get('/loan/{loan_id}', function (Request $request, Response $response) use ($app, $model) { 
          if($validator->isValid()){ 
           // 
          } 
          $loanId = $request->getAttribute('loan_id'); // here it works 
          $data = $model->getLoan($loanId); 
          $newResponse = $response->withJson($data, 201); 
      
          return $newResponse; 
      })->add($mw); 
      

Лучший вариант для меня это что-то сделать например here , но я не понимаю, что мне следует возвращать в контейнере, и как передавать входной/выходной вход в контейнер

+0

Вы не можете просто 'print_r()' в промежуточном программном обеспечении. Попробуйте что-то вроде этого вместо '$ response-> write (print_r ($ data), true))' –

ответ

0

Ваш код в первом пункте кажется в порядке, вы пытаетесь только получить доступ к параметру маршрута из промежуточного программного обеспечения. В этот момент маршрут еще не разрешен и поэтому параметры не анализируются из URL-адреса.

Это известный вариант использования и описан в Slim's documentation. Добавьте следующие настройки в конфигурации приложения, чтобы получить код работы:

$app = new App([ 
    'settings' => [ 
     // Only set this if you need access to route within middleware 
     'determineRouteBeforeAppMiddleware' => true 
    ] 
]); 

Для того, чтобы понять, как связующее ПО работает и как манипулировать объект ответа, я предлагаю вам прочитать User Guide - это не так долго, и объясняет, что на самом деле Что ж.

 Смежные вопросы

  • Нет связанных вопросов^_^