laravel-route-notes
laravel框架擴展,原生注解生成路由
優點是直接生成路由檔案,不在運行中決議路由,提升效率
使用環境
[PHP] >= 8.0
[Laravel] >= 9.0
如何安裝
直接使用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')`,將不會起作用,相同的屬性,在分組里面宣告并不會生效,
類注解的都是會自動注冊到方法注解里面,也可以在方法注解里面覆寫,
更多說明,請閱讀composer包里的說明檔案,趕快來試一試吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539498.html
標籤:其他
上一篇:每日演算法之二叉搜索樹與雙向鏈表
