文章转发自专业的Laravel开发者社区,原文链接:https://learnku.com/laravel/t...为您提供了一个漂亮而优雅的API。下面我要介绍的内容没有什么新意,只是一个小技巧,希望对你学习Laravel有所帮助。路由的文档非常好,下面的技巧将被补充和拼凑在一起,以帮助您快速掌握如何在Laravel项目中使用路由。自定义命名空间正如文档所说,如果你想在路由组中使用像App\Http\Controllers\Admin这样的命名空间,那么你可以使用Laravel5.4中引入的流式路由API:Route::namespace('Admin')->group(function(){//“App\Http\Controllers\Admin”命名空间下的控制器});这正是每个Laravel项目都会使用的RouteServiceProvider技术:'));}由于routes/web.php文件有命名空间,所以Admin命名空间使用相对路径。要在App\Http\Controllers\Admin命名空间下创建控制器,可以在控制台运行以下命令:phpartisanmake:controller-rAdmin/UsersController和前面的例子一样,这个命令是在routes定义的路由在/web.php文件中类似于这样:Route::namespace('Admin')->prefix('admin')->group(function(){Route::resource('users','UsersController');});Routermacros可以定义宏,也就是说如果你想通过一个包提供一组路由,或者重用一组路由定义,那么你可以在服务提供者中定义一个宏。例如,如果你有一个包含许多购物路线的购物中心包,你想让用户重写或自定义一些路线,你可以这样做://在服务提供者的boot()方法中publicfunctionboot(){Route::macro('shopRoutes',function($prefix){Route::group(['prefix'=>$prefix,'middleware'=>['shopping'],],function(){Route::get('products/{product}','ProductsController@show');//...});});}接下来用户可以进入一个新的Laravel项目的routes/web调用刚才的宏.php文件:collect(config('languages'))->each(function($language){Route::shopRoutes($language);});或选择以下实现方法:Route::macro('shopRoutes',function($languages){Route::group(['prefix'=>'/{language}','middleware'=>['shopping'],'where'=>['language'=>implode('|',$languages)],],function(){Route::get('products/{product}','ProductsController@show');//...});});宏示例是抽象的,但您可以理解。我建议仅在它们可以帮助您的项目时才使用路由宏。你会知道什么时候去做!调试路由在Laravel应用程序中,我很欣赏web.php文件(和api.php文件)对应用程序可以响应的路由进行自我记录。由于我更看重这个文件的文档方面,所以我更喜欢一条一条地定义路由,而不是使用资源路由。如果您发现自己试图找到某个路由或调试所有可能定义的路由,命令artisanroute:list可能会有用:artisanroute:list+--------+---------+------------+------+--------+------------+|域名|方法|网址|名称|行动|中间件|+--------+----------+--------+-----+--------+--------------+||得到|头|/||关闭|网站|||得到|头|接口/用户||关闭|api,auth:api|+------+---------+---------+------+---------+------------+route:list这个命令对于查看路由名称及其附加的中间件非常有帮助。这也导致了我接下来要介绍的技巧:命名路由。命名组路由Laravel中的一个常见约定是命名路由,它允许您轻松引用路由名称并避免在模板中硬编码根相对URI。在某些应用程序中,硬编码URI很好,在其他情况下,命名路由允许以下内容:{{route('admin.users.show',['user'=>$user])}}{{--/admin/users/2--}}当你在定义一组路由时,例如我们的admin示例,你也可以在组上添加路由名称前缀:Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function(){Route::resource('users','UsersController');});上面的前缀名称将生成路由名称,如以下是用户资源控制器:admin.users.indexadmin.users.storeadmin.users.createadmin.users.showadmin.users.updateadmin.users.destroyadmin.users.editLearnMore阅读整个路由文档和资源控制控制器文档的llers部分。我参考资源控制器部分来尝试确保我的大部分路由代表REST动词和路由命名约定。
