laravel9-原生注解路由插件-laravel-route-notes

大家好,萌新一个,今天为大家带来一款自己写的 laravel 扩展,欢迎大家的使用和讨论。
这是第一个版本,后续也会随着使用不断的优化和改造

laravel-route-notes#

laravel 框架扩展,原生注解生成路由

优点是直接生成路由文件,不在运行中解析路由,提升效率

使用环境#

如何安装#

直接使用 composer 进行安装:

composer require --dev lovefc/laravel-route-notes

命令使用#

php artisan notes:route [-p dirname] [-f filename]

-p 要生成的控制器目录名称,默认为 app/Http/Controllers/

-f 生成的路由文件地址,默认为 route/date("Y-m-d-His").php

如果不指定控制器目录,默认会扫描 app/Http/Controllers/ 下的所有控制器文件进行生成

注解使用#

首先要先在控制器类中标记开启注释功能,这样运行命令才会生成路由


<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

use App\Models\User;

#[annotate('true')]
class UserController extends Controller
{

   #[get('/show')]
   public function show()
   {
       return view('welcome');
   }
}

上面是一个常规的控制器,必须在声明类的上面加上 #[annotate (‘true’)], 这样才会生成注解。

可以在类的注解上声明全局的属性,比如:

#[annotate('true'),prefix('/user')]

这样下面方法注解就会自动带上前缀,当然你也可以在方法上改变这个前缀。

注解方法的属性跟路由使用基本上一样。

比如:

#[get('show'),prefix('/user'),middleware('myauth')]

上面声明的注解最终会生成以下的路由:

Route::prefix("/user")->post("all",[userController::class,"show"])->middleware("myauth");

除此之外,也支持 where 正则验证:

#[get('show/{name}'),where(['name'=>'[a-z]+'])]

又或者这样:

#[get('show/{name}'),where('name','[a-z]+')]

另外你可以在类注解上面声明全局的 where 属性:

#[annotate('true'),prefix('/user'),where(['name'=>'[a-z]+'])]

重定向路由注解案例:

#[annotate('true')]
class MyController extends Controller

{
    #[get('/index')]
    public function index(Request $request){
        return view('welcome');
    }

    #[redirect('/','/index')]
    public function home(){
    }
}

分组注解#

laravel-route-notes 扩展新增了分组路由支持,先看下面两个控制器


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

#[annotate('true'),group(['prefix' => '/home','middleware'=>'auth'])]
class MyController extends Controller
{
    #[get('/show')]
    public function show()
    {
        echo 'show';
    }

    #[get('/show2')]
    public function show2()
    {
        echo 'show2';
    }    
}

MyController 控制器的类注解上加上了一个 group(['prefix' => '/home','middleware'=>'auth'])

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

#[annotate('true')]
class My2Controller extends Controller
{
    #[get('/')]
    public function show()
    {
        return view('welcome');
    }

    #[get('/login'),name('login')]
    public function login()
    {
        return view('welcome');
    }    

    #[get('/show3'),group(['prefix' => '/home','middleware'=>'auth'])]
    public function show2()
    {
        echo 'show3';
    }    
}

My2Controller 控制器的方法 show2 上的注解上,同样也有个 group(['prefix' => '/home','middleware'=>'auth'])

那么我们看一下最后生成的路由是什么样子的:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\My2Controller;
use App\Http\Controllers\MyController;

Route::get("/",[My2Controller::class,"show"]);

Route::get("/login",[My2Controller::class,"login"])->name("login");

Route::group(['prefix'=>'/home','middleware'=>'auth'],function(){

    Route::get("/show3",[My2Controller::class,"show2"]);

    Route::get("/show",[MyController::class,"show"]);

    Route::get("/show2",[MyController::class,"show2"]);

});

大家可以看到,对于相同命名的路由都会归类到一起。

关于路由分组,其实限制又有不少,因为如果命名了 group ([‘属性’=>’属性值’]), 那么最好不要再去单独声明相同的属性了。

另外,如果你类注解声明了 group(['prefix' => '/home'], 那么方法注解里,在声明 prefix('/home2'), 将不会起作用,相同的属性,在分组里面声明并不会生效。

类注解属性#

关于类注解和方法注解的属性名称如以下所示:

类注解的都是会自动注册到方法注解里面,也可以在方法注解里面覆盖

注解类属性 (全局属性) 方法属性
prefix,name,where,domain,middleware,group prefix,name,where,domain,middleware,group,post,get,any,match,options,patch,view,redirect,put,delete

LICENSE#

Laravel-route-notes is released under the MIT license

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12

要是能自动分组就好了

file

2年前 评论
lovefc (楼主) 2年前
lovefc (楼主) 2年前
lovefc (楼主) 2年前
lovefc (楼主) 2年前

我还是手写吧,写完注解还要去复核生成的文件,还得合并,写注解的功夫路由也写完了

2年前 评论
lovefc (楼主) 2年前

挺好的

2年前 评论
lovefc (楼主) 2年前
lovefc (楼主) 2年前
抄你码科技有限公司
composer require spatie/laravel-route-attributes

github.com/spatie/laravel-route-at...

spatie.be/videos/front-line-php/ad...

2年前 评论
lovefc (楼主) 2年前