lumen 中间件return $next($request); 传递参数到下一个controller怎么获取?

新手上路,请多包涵

lumen

web.php中定义路由,post方法提交age参数,经过中间件auth_age:

    $app->group(['middleware' => 'auth_age'], function() use ($app) {
        $app->group(['namespace' => '\App\Account\Http\Controllers'], function() use ($app) {
            $app->post('/age', [
                'as' => 'age',
                'uses' => 'UserController@getAge'
            ]);
        });
    });
    

app.php中已注册auth_age:

$app->routeMiddleware([
    'auth_age' => App\Account\Http\Middleware\AgeMiddleware::class,
]);

中间件 AgeMiddleware.php:

public function handle($request, Closure $next)
{
    //echo $request->input('age');exit;        //post到这里能获取到
    if ($request->input('age') < 18) {
        return redirect('/');
    }
    return $next($request);    //这里跳转到 UserController@getAge
}

UserController.php

public function getAge($age)            //这里的$age参数无法获取,且报错
{
    return "age is ".$age.".";
}

不加$age参数的话没有出错信息

public function getAge(){
...
}

请教的问题:如何把post后的参数经过中间件,也能完整的传给后面的Controller?

阅读 4.2k
2 个回答
新手上路,请多包涵

自己回答:
UserController.php

.
.
use Illuminate\Http\Request;
.
.
.
public function getAge(Request $request)
{
    $age = $request->input('age');
    return "age is ".$age.".";
}
$input = $request->all();
// 或者
$age = $request->input('age');

因为经常写API, 我个人的习惯是用all()

    $check_result = check_required_data( $input, ['login_type', 'login_value'] );
    if( $check_result['code'] == 404 ){
        return response(['msg'=>$check_result['msg']], $check_result['code'] );
    }
.
.
.
/**
 * 检测需要的变量
 * 
 * @param array $input_data
 * @param array $required_data
 *
 * @return array
 */
public function check_required_data( $input_data = [], $required_data = [] ){

    foreach($required_data as $value ) {
        if ( idx( $input_data, $value, false ) === false ) {
            $dis = str_replace('_', ' ', $value); // 自定义变量习惯
            return [ 'msg'=>'require ' . $dis , 'code' => '404' ];
        }
    }
    return [ 'msg'=>'success', 'code' => '200' ];
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题