lynxcat/laravel-annotation

dev-master 2020-04-02 07:08 UTC

This package is auto-updated.

Last update: 2024-09-29 05:36:08 UTC


README

最近在laravel项目中,遇到了显式路由和隐式之争。 显式路由太杂乱,要么文件里面写很多条路由,要么分成很多文件,不是很爽。而隐式路由,因为需要实现一套自己项目的内部逻辑,增加一定的上手成本,还有可能导致框架本身的route:cache使用不了

为了能够更好的解决路由这个问题,尝试用reflection机制模拟了一个sping的注解写法,一方面不用谢配置文件,第二方面可以很好的兼容route:cache,开发运行两不误

暂时实现了对类的@RequestMapping(value="user", prefix="system", middleware="auth")功能,参数均为可选,如果只有一个value 可以直接用 @RequestMapping("user")

对于函数实现了 @PostMapping, @GetMapping, @PutMapping, @AnyMapping, @PatchMapping, @DeleteMapping, @OptionsMapping, 参数与@RequestMapping一致, 不同点在于value为必填,不写会异常

支持@GetMapping("/detail/{id}") 这种动态参数的模式,目前尚不支持domain resource, where, namespace, only 等功能,后面如果项目有需要的话进行更新

##安装使用

###Route

Step 1.下载源码

    composer require lynxcat/laravel-annotation

Step 2.在控制器中使用注解

    
    /**
     * Class UserController
     * @package App\Http\Controllers
     * @RequestMapping("users")
     */
    class UserController extends Controller
    {
    
        /**
         * 用户列表
         * @GetMapping(value="/list", middleware={"auth"})
         */
        public function index()
        {
            return "hello, user list";
        }
    
        /**
         * 用户编辑
         *
         * @GetMapping("/edit/{id}")
         * @PostMapping("/eidt/{id}", middleware={"auth:eidt-user"})
         */
        public function eidt(int $id) {
           
        }
    
    }

浏览器访问 http://your_host/users/list 就可以看到结果了

###Service

Step 1.在类中加上注解

/**
 * Class UserServiceImpl
 * @package App\Services
 *
 * @Service
 */
class UserServiceImpl implements UserInterface {

}

Step 2.可以直接使用

use App\Contracts\UserInterface as User;
use Illuminate\Http\Request;

/**
 * Class UserController
 * @package App\Http\Controllers
 * @RequestMapping("users")
 */
class UserController extends Controller
{
    protected $user;
    protected $request;

    public function __construct(Request $request, User $user)
    {
        $this->request = $request;
        $this->user = $user;
    }
}

另外扩展包自带了两个命令

    php artisan annotation:cache #生成缓存文件
    php artisan annotation:clear #清除缓存文件

缓存文件放在 /vendor/lynxcat/laravel-annotation/src/Cache/中,可以用于对比生成的route以及service是否正确。

生产环境建议使用 php artisan annotation:cache; php artisan route:cache 可以提升文件读取效率