【问题标题】:how to access header in lumen routing file(web.php)如何访问流明路由文件(web.php)中的标头
【发布时间】:2017-12-13 12:53:16
【问题描述】:

如何访问路由文件lumen中的header?

我想在 web.php 的路由组中使用标头参数值作为命名空间。

示例:

$router->group(['namespace' => 'Request::header('version')'], function() use ($router) 
{
    $router->post('login', 'UserController@loginUser');
    $router->post('test', 'UserController@testApi');
});

如果请求标头版本参数 v1 则使用 v1 命名空间,如果 v2 则使用 v2 命名空间。类似于版本控制。

【问题讨论】:

  • 如果你的意思是访问请求头,如果你将$request作为参数传递给控制器​​(例如public function index(Request $request))或中间件(例如handle($request, Closure $next)),你应该能够得到他们是$request->header('yourheaderkey')。但是看看你的版本控制方法,我认为最好将 2 个不同的路由组制作成 2 个不同的路由文件。

标签: lumen


【解决方案1】:

如果您只想从标头中获取版本,您可以尝试将Request 作为回调参数,如图所示:

$router->get('/head', function(\Illuminate\Http\Request $request) {
    return $request->header('version');
});

上面应该返回您使用version 键作为标题放置的任何值。

但我个人建议你尝试为此分离路由组。说你会有

$app->router->group([
    'namespace' => 'App\Http\Controllers\Api', 
    'prefix'=> 'api/v1/',
    'middleware' => ['jwt.auth', 'student_access_token']
], function ($router) {
    require __DIR__.'/../routes/api.php';
});

然后对于其他版本,您只需在 bootstrap/app.php 上定义相同的指向其他路由文件。希望对您有所帮助。

【讨论】:

  • 我使用 app.php 中的 $_SERVER 函数首先使用 $_SERVER['HTTP_VERSION'] 获取标头并决定使用哪个版本的路由文件。我不确定这是对还是错
  • 我的 app.php 代码 $version = 'v1'; if (isset($_SERVER['HTTP_VERSION'])) { $version = $_SERVER['HTTP_VERSION']; } switch ($version) { case 'v2': $app->router->group(['namespace' => 'App\Http\v2'], function ($router) { require DIR . '/../routes/v2.php'; });休息;默认:$app->router->group(['namespace' => 'App\Http\v1'], function ($router) { require DIR . '/../routes/v1 .php'; });休息; } 返回 $app;
猜你喜欢
  • 2018-12-22
  • 1970-01-01
  • 2021-02-03
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
相关资源
最近更新 更多