2016-08-22 3 views
0

Согласно http://www.slimframework.com/docs/concepts/middleware.html, промежуточное программное обеспечение маршрутизации добавляется следующим образом.Доступ к параметрам в промежуточном программном обеспечении Slim v3

<?php 
$app = new \Slim\App(); 

$mw = function ($request, $response, $next) { 
    // How is $arg accessed? 
    $response->getBody()->write('BEFORE'); 
    $response = $next($request, $response); 
    $response->getBody()->write('AFTER'); 

    return $response; 
}; 

$app->get('/ticket/{id}', function ($request, $response, $args) { 
    $response->getBody()->write(' Hello '); 
    // $arg will be ['id'=>123] 
    return $response; 
})->add($mw); 

$app->run(); 

$arg будет массивом параметров. Как можно получить доступ к промежуточному программному обеспечению?

http://help.slimframework.com/discussions/questions/31-how-pass-route-pram-to-middleware показывает, что подход к этому, однако, представляется более ранним выпуском Slim и ошибками Fatal error: Call to undefined method Slim\\Route::getParams().

ответ

2

Route Params можно получить доступ через routeInfo Attribute на запрос, в качестве такого

$app->get('/hello/{name}', \HelloWorld::class . ':execute') 
    ->add(function ($request, $response, $next) { 
     var_dump($request->getAttribute('routeInfo')[2]['name']);exit(); 
     return $next($request, $response); 
    }); 

Это отмечено в this Github issue

+1

Вам нужно будет использовать тонкий настройки приложений для того, чтобы это работало. defineRouteBeforeAppMiddleware => true ... http://www.slimframework.com/docs/objects/application.html#slim-default-settings – geggleto

+0

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

+0

Спасибо Гарет. Я тестировал этот код, и он работает так, как есть. Учитывая отсутствие хорошей документации, я немного обеспокоен тем, что в будущих пересмотрах она не может быть поддержана. – user1032531

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