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

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.cnblogs.com/lovefc/p/16965788.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:laravel9-原生注解路由插件-laravel-route-notes - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • PHP二维数组分页2种实现方法解析

    PHP二维数组分页2种实现方法解析 在开发Web应用程序时,我们经常需要对数据进行分页显示。在处理一维数组分页时,我们可以使用array_slice()函数,但是在处理二维数组分页时就需要更复杂的代码逻辑。这里介绍两种PHP二维数组分页的实现方法。 方法一:使用array_chunk()和array_slice()函数 array_chunk()函数可以将一…

    PHP 2023年5月26日
    00
  • php实现字符串反转输出的方法

    下面是详细讲解PHP实现字符串反转输出的方法的完整攻略。 标准解法 在PHP中,我们可以用内置函数 strrev() 来实现字符串的反转。 $str = "Hello World!"; $reversedStr = strrev($str); echo $reversedStr; // 输出 "!dlroW olleH&quot…

    PHP 2023年5月26日
    00
  • 获取知识、保存知识、学习知识和分享知识的管理工具及相关经验技巧

    获取知识: 订阅RSS源:可以通过软件(比如Feedly)将不同网站的文章收集在一个页面上,便于查看和获取信息。 使用Twitter和LinkedIn关注行业内的专业人士,他们往往会分享一些有价值的信息和文章。 保存知识: 使用知识管理工具(例如Notion、Evernote),可以将笔记和思维导图整理成一个系统化的框架,便于整理和查看。 建立一个有机构的文…

    PHP 2023年5月27日
    00
  • PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法

    PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法 什么是ffmpeg? ffmpeg是一款开源的音视频解决方案软件,它可以实现多种音视频的编解码、转换等操作。在linux下,可以通过yum、apt等包管理器安装。在windows下,可以在官网找到对应的安装包。 安装ffmpeg扩展 在PHP中使用ffmpeg,需要先安装ffmpeg扩展。在linu…

    PHP 2023年5月26日
    00
  • PHP中strtr字符串替换用法详解

    下面是关于“PHP中strtr字符串替换用法详解”的完整攻略。 什么是strtr函数? strtr函数是PHP中用来进行字符串替换的函数,它可以将一个字符串中指定字符或字符串替换成另外一个字符或字符串。 strtr函数的语法格式 string strtr ( string $str , array $replace_pairs ) strtr函数的参数说明 …

    PHP 2023年5月26日
    00
  • php中的数组操作函数整理

    以下是详细讲解“php中的数组操作函数整理”: 简介 PHP中的数组操作函数很多,其中一些十分重要。本篇攻略主要整理了PHP中常用的一些数组操作函数,包括数组的创建、遍历、排序、查找等操作,以及示例说明。 创建数组 array函数 通过array函数可以创建一个新的数组,语法如下: array(value1, value2, …) 其中value可以是一个变…

    PHP 2023年5月26日
    00
  • php打乱数组二维数组多维数组的简单实例

    当需要对数组进行随机打乱时,可以使用shuffle函数。该函数可以随机打乱给定数组中的元素顺序,适用于一维、二维和多维数组。以下是一个针对不同类型数组的简单实例说明: 一维数组乱序 假设有一个包含10个元素的一维数组,需要对其进行随机打乱。可以使用以下代码: <?php $myArray = array(‘a’, ‘b’, ‘c’, ‘d’, ‘e’,…

    PHP 2023年5月26日
    00
  • php设置编码格式的方法

    PHP在处理字符时需要注意编码格式的问题,否则会出现乱码等问题。下面是设置编码格式的几种方法: 方法一:通过ini_set()函数设置编码 使用ini_set()函数可以在代码中动态地设置PHP的配置选项,包括字符编码。以下是设置编码为UTF-8的示例代码: ini_set("default_charset", "UTF-8&q…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部