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
推荐文章: