文章开始前先说个前提;
这个系列的文章我都会把控制器按模块划分了;
示例都是在模块的基础上讲解的;
关于模块先参考上篇文章;
写给 thinkphp 开发者的 laravel 系列教程 (三) 目录结构
正文开始;
如果我们想访问 Admin 模块下的 IndexController 控制器的 index 方法;
在 thinkphp 中是不需要手动定义的;
这根本不算是一个问题;
直接访问 https://baijunyao.com/Admin/Index/index
即可;
而 laravel 则需要在routes/web.php 文件中定义如下:
Route::get('admin/index/index', 'Admin\IndexController@index');
每写一个方法就要定义一条路由;
从 thinkphp 转到 laravel 的筒子们;
路由是一个必定产生疑惑的地方;
laravel 整天标榜这自己优雅;
这 thinkphp 中都自动完成的东西;
laravel 还需要手动写一大串;
这到底哪优雅了;
我是一个懒人;
当我知道了我要写那么多路由;
我是拒绝的;
于是我一度在研究如何让 laravel 也像 thinkphp 那么实现自动路由;
终于皇天不负苦心人;
我搞定了这件事;
如果你也是和我一样的懒人;
那么恭喜你;
等我下面给出解决的方案吗?
NO;NO;NO;
我并不打算教你;
因为我在使用 laravel 的过程中;
不断的感受到了 laravel 对于解耦的执着;
当我重构几次项目后;
就理解到了这种自定义路由的灵活;
把上面这堆水拧干了;
核心就是想说服已经习惯 thinkphp 路由的童鞋们接受并使用路由;
但是如果都像上面那样一条一条定义路由;
Route::get('admin/article/index', 'Admin\ArticleController@index');
Route::get('admin/article/create', 'Admin\ArticleController@create');
Route::post('admin/article/store', 'Admin\ArticleController@store');
想想也是挺心累的;
那我这里利用 group
prefix
让路由更简洁和更有层级感了;
可以实现像 thinkphp 那样的 模块/控制器/方法
三级;
给出一个示例;
// Admin 模块
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin.auth'], function () {
// 文章管理
Route::group(['prefix' => 'article'], function () {
// 文章列表
Route::get('index', 'ArticleController@index');
// 发布文章
Route::get('create', 'ArticleController@create');
// ...
});
// 分类管理
Route::group(['prefix' => 'category'], function () {
// 分类列表
Route::get('index', 'CategoryController@index');
// 添加分类
Route::get('create', 'CategoryController@create');
});
});
上面代码中的 namespace 就是相对于 app/Http/Controllers 的命名空间;
路径为 app/Http/Controllers/Admin 的admin模块的 namespace 就是Admin了;
prefix 就是定义 url 中模块和控制器的名字了;
middleware 是中间件;
这里不多说;后续文章将持续讲解;
所以上面示例中定义的 url 分别是;
admin/article/index
admin/article/create
admin/category/index
admin/category/create
还是原来的配方;熟悉的味道;
这样是不是既符合已有的 thinkphp 习惯;
又不违反 laravel 的规则;
在url中相比 thinkphp laravel还多出了个路由参数的概念;
但是因为要在控制器中获取值;
所以我放在了下一篇文章讲解控制器的时候一起讲了;
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
Time :想请教一下用的什么编辑器,我看代码的空格等格式和laravel的一样
2018-11-09 15:44:08 回复
这般 :写的不错,但是我按照你的方式访问控制器没成功。。。
2018-10-21 16:12:57 回复
=͟͟͞͞若=͟͟͞͞水 :您写的laravel开源博客有点复杂, 还引用了自己composer包, 文档只是写了基础的部署教程. 看完你写的laravel教程入门不错, 但是看你的开源博客代码还是很吃力的.
2018-09-04 11:23:23 回复
云淡风晴 :博客项目还不算复杂;不过确实有不少知识点是不在我这个教程范围内的;等我后续教程都写完后;再看博客代码就简单了;
2018-10-20 22:12:16 回复
=͟͟͞͞若=͟͟͞͞水 :上一篇和下一篇写反了吧?
2018-08-23 19:24:18 回复
云淡风晴 :多谢反馈;
2018-09-02 22:45:15 回复
花舞千魂殇 :还是原来的配方;熟悉的味道; ha好风趣的赶脚
2018-07-25 14:14:21 回复
:
2017-10-27 17:30:41 回复
晨曦 :不错,值得收藏
2017-10-12 15:43:18 回复
Wake1 :我是一个懒人;当我知道了我要写那么多路由;我是拒绝的;
2017-09-07 17:27:19 回复
沉默纪年灬 :教程很好,有老大在入门快多了
2017-08-14 17:31:52 回复
THIRD_KING :http://menvscode.com/,博主,换友链不?
2017-08-04 15:02:10 回复
吴伟祥 :http://sucaime.com 用你的博客系统做的!真的很好的一套开源系统!
2017-08-04 11:33:27 回复
PHP部门 :加油更啊!!!!
2017-08-02 13:45:34 回复
弱水三千 :你不是说用了百度云加速吗?怎么不用了?
2017-08-01 01:59:04 回复
李景lizole :能详细讲下 中间件吗?
2017-07-31 10:18:14 回复
张学军 :你好,经常光临你的博客,感觉你的博客蓬荜生辉,所以希望与你的网站友情链接,本站http://www.yuedudg.cn/本站360收录6000如果您同意的话,请到本站留言,本站将在第一时间上链
2017-07-30 18:55:25 回复
bref :老哥,换个友链吧www.lukedever.cn,我把你的加上了
2017-07-27 08:37:57 回复
NULL :后来发现 把路由文件分成几个小文件 然后以require的方式引入 对路由来说也是很清晰并且适合多人协作开发的。最起码能避开svn冲突问题
2017-07-25 09:22:16 回复
云淡风晴 :这还真是一个机智的解决方案;
2017-08-03 23:57:46 回复
楓楪夢殇 :
2018-01-25 16:31:36 回复
源 :我想问一下网址输入/Admin这一个路由应该怎么写?
2017-07-24 20:23:34 回复
云淡风晴 :Route::get('Admin', '控制器@方法');
2017-07-24 22:11:42 回复
源 ://后台Route::group(['namespace' => 'Admin', 'prefix' => 'Admin'], function () { Route::get('/', 'Admin\LoginController@index');//这个访问为啥是403// 登陆 Route::group(['prefix' => 'Login'], function () { // 页面 Route::get('/', 'LoginController@index'); Route::get('index', 'LoginController@index');});});
2017-07-24 22:49:47 回复
幸福的小海豚 :
2017-07-31 11:43:42 回复
楓楪夢殇 :
2018-01-25 16:32:37 回复
爱便流通于世 :白哥!讲的太到位了!嘿嘿!继续更!加油!
2017-07-24 11:28:33 回复
云淡风晴 :.
2017-07-24 22:12:24 回复
最新评论