看完前几篇从请求到响应的过程,认真研究路由和中间件的玩法-------------------------分向線-----------------路由的基本用法可以参考路由的中文文档。需要注意的是1)$app应该换成$route2)namespace不需要写全。新的5.5版本会自动完成前面的部分。我们看基本的例子//当路由是api.com/index.php/user/1/hano/2时,//通过ExampleController的show方法响应请求$router->get('user/{id}/{name}/{sex}','ExampleController@show');//因为键值对可以命名这条路由,uses指定响应操作//as对于生成重定向URLs很有用:redirect()->route('profile');//中间件中间件提供了一种方便的机制来过滤进入应用程序的HTTP请求**要使用中间件,首先在app.php中打开routeMiddleware代码的注释注册中间件**//$app->routeMiddleware([//'auth'=>App\Http\Middleware\Authenticate::class,//'validate'=>App\Http\Middleware\validateMiddle::class,//'before'=>App\Http\Middleware\beforeMiddle::class,//'after'=>App\Http\Middleware\afterMiddle::class,//]);$router->get('getUrl/{str}',['as'=>'profile','uses'=>'ExampleController@getUrl','middleware'=>'auth']);//路由组可以设置公共属性对于多条路线,无需从上面//namespace命名空间设置一次,将匹配到的路由交给App\Http\Controllers\User\下的controller处理//prefix路由前缀匹配到的路由是api.com/index.php/admin/{routename}//middleware这组路由会先经过validate中间件$router->group(['namespace'=>'User','prefix'=>'admin','middleware=>'validate'],function()use($router){$router->get('getUserInfo/{user_id}',['as'=>'getUserInfo','uses'=>'UserController@getUserInfo']);$router->post('updateUserInfo/{user_id}',['as'=>'updateUserInfo','uses'=>'UserController@updateUserInfo']);});middleware中间件文件放在app/http/Middleware文件夹下,可以根据ExampleMiddleware.php创建中间件,中间件分为前端和后端两种。前置中间件namespaceApp\Http\Middleware;useClosure;classBeforeMiddleware{//第三个参数是附加参数publicfunctionhandle($request,Closure$next,$name){//前置中间件,做你想做的在执行路由定义var_dump($name)指定的操作之前;返回$next($request);}}中间件之后get('getUrl/{str}',['as'=>'profile','uses'=>'ExampleController@getUrl','middleware'=>['before:hano','after:hano']//hano将是$name的值]);全局中间件每个HTTP请求都会经过一个中间件,只需要在bootstrap/app.php的$app->middleware()调用参数数组中添加中间件类即可$app->middleware([App\Http\Middleware\Authenticate::class,]);可终止中间件有时中间件需要在HTTP响应发送到浏览器后运行,例如“session”中间件存储的会话数据直到响应发送到浏览器进行写入时才会运行。为此,您需要将中间件定义为“可终止的”。middleware([App\Http\Middleware\Authenticate::class,App\Http\Middleware\terminable::class,]);当在你的中间件中调用terminate方法时,Lumen将解析一个全新的中间件实例。如果想在调用handle和terminate方法时使用一致的中间件实例,只需要使用容器的singleton方法注册中间件即可$app->singleton(App\Http\Middleware\terminable::class);上面是路由和中间件的学习。最后对terminable和that部分的理解其实有点模糊。如有错误,记得指出指正,谢谢
