草庐IT

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

做自己的英雄 2023-03-28 原文

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包里的说明文档,赶快来试一试吧!

有关laravel9-原生注解路由插件-laravel-route-notes的更多相关文章

  1. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  2. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  3. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  4. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  5. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  6. ruby-on-rails - Rails - 从命名路由中提取 HTTP 动词 - 2

    Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba

  7. ruby-on-rails - 如何在 Rails 中设置路由的默认格式? - 2

    路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。

  8. ruby-on-rails - 优雅的 Rails : multiple routes, 相同的 Controller Action - 2

    让多条路线去同一条路的最优雅的方式是什么ControllerAction?我有:get'dashboard',to:'dashboard#index'get'dashboard/pending',to:'dashboard#index'get'dashboard/live',to:'dashboard#index'get'dashboard/sold',to:'dashboard#index'这很丑陋。有什么“更优雅”的建议吗?一个类轮的奖励积分。 最佳答案 为什么不只有一个路由和一个Controller操作,并根据传递给它的参数来

  9. ruby-on-rails - 您希望看到哪些 Rails 插件? - 2

    您认为可以作为插件很好地存在于您的Rails应用程序中必须实现的哪些行为?您过去曾搜索过哪些插件功能但找不到?哪些现有的Rails插件可以改进或扩展,如何改进或扩展? 最佳答案 我希望在管理界面中看到一个引擎插件,它提供了应用程序中所有模型的仪表板摘要,以及可配置的事件图表。 关于ruby-on-rails-您希望看到哪些Rails插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

  10. ruby-on-rails - ruby rails : How do you prefix named routes? - 2

    我希望生成一个链接,该链接的前缀附加到命名路由本身。像这样显示路径“/old/recipes”:recipes_path(:prefix=>"old/")#thecorrectwayshouldshow"/old/recipes"我不想动routes.rb文件,而是修改带前缀的命名路由。这可能吗?您将如何正确地做到这一点?编辑:我正在使用Rails3。添加可选前缀的原因是我也想使用普通的recipes_path。所以我想同时使用“/recipes”和“/old/recipes”。 最佳答案 如果您不想触及路由文件,您将会遇到很多麻烦

随机推荐