laravel控制器分组

http://www.zroran.com/it/php/laravel/6.html 

在laravel默认配置中,所有控制器都在 app/controllers 目录下,很多时候需要分组功能,比如 API分组,ADMIN分组,前台分组。

手册中并没有明确就这个需求给出解决方案,故再次记录一下自己的解决方式。

提到分组,我首先想到的就是利用php5.3以上版本才有的namespace命名空间功能。laravel默认使用的是classmap来自动加载类库,我们查看composer.json,可以看到一段:

"autoload": {
   
"classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
},

我们看到其中有一行 "app/controllers" ,框架会在这个目录里搜索控制器。
如果我们要将控制器分组,当然可以增加几个目录,比如"app/controllers/admin","app/controllers/api",这样框架也会挨个目录查找指定的类,这种模式有个缺点,那就是在这些子目录中,得保持类名的唯一性,也就是说你在admin中定义了HomeController 就不能在 api中定义同名控制器。

换种方式,用namespace来支持自动加载,我们知道laravel深度结合了composer,也使用了composer的autoloader类,所以我们只要配置composer.json即可轻松实现基于namespace的自动加载。

在上面代码中加几行代码:

"autoload": {
    "psr-4":{
        "mc\\":"app/controllers"
    },
"classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
},

之后在composer.json目录执行一下composer命令:

composer dump-autoload

这样,我们将整个controllers目录映射到 mc 命名空间下,而laravel路由应当这样写:

Route::get('/admin','admin\HomeController@index');

控制器文件位于:app/controllers/admin下:

<?php
namespace mc\admin;
class HomeController extends \BaseController {
    function index()
    {
        return "admin/index";
    }
}

总结:这样我们很方便的就可以将控制器按命名空间进行分组。


转载于:https://my.oschina.net/cxz001/blog/346889

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值