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中遍历二维数组并以表格的形式输出的方法

    在PHP中,遍历二维数组并以表格的形式输出比较常见,可以使用for循环或者foreach循环完成。 以下是具体的方法: 1.使用for循环 <?php $users = array( array(‘name’ => ‘小明’, ‘age’ => 18, ‘sex’ => ‘男’), array(‘name’ => ‘小红’, ‘…

    PHP 2023年5月26日
    00
  • ID中如何使用插件编辑数学公式?InDesign中的数学公式插件用法

    在InDesign中,我们可以使用MathTools这个数学公式插件来编辑数学公式。下面是具体的操作流程。 步骤一:安装MathTools插件 首先,我们需要将MathTools插件安装到InDesign中。插件的安装方法为,在InDesign中点击“菜单栏 > 编辑 > 首选项 > 常规”打开常规设置窗口,在该窗口内点击“插件”选项卡,在…

    PHP 2023年5月26日
    00
  • php调用自己java程序的方法详解

    针对“php调用自己java程序的方法详解”,我们可以从以下三个方面进行讲解: Java程序的封装和构建 PHP调用Java程序的方法 示例说明 1. Java程序的封装和构建 首先,我们需要将Java程序封装成jar包,这可以通过Eclipse等Java开发工具实现: 进入Eclipse,打开Java工程。 右键点击该工程,选择Export,找到Java中…

    PHP 2023年5月26日
    00
  • 高性能PHP框架Symfony2经典入门教程

    高性能PHP框架Symfony2经典入门教程完整攻略 Symfony2是一个面向对象的PHP框架,其出色的性能和强大的功能能够帮助开发者快速构建高质量的Web应用。本教程将带领你从入门到进阶,全面了解Symfony2的架构、编程模型和各种常用功能。 基础篇 1. 安装Symfony2 首先,需要在你的机器上安装PHP。可以通过官网下载最新版PHP:https…

    PHP 2023年5月23日
    00
  • 微信小程序人脸识别功能代码实例

    微信小程序人脸识别功能代码实例 介绍 本文将介绍如何在微信小程序中使用人脸识别功能。通过调用微信API以及集成百度AI人脸识别API,实现人脸识别功能。本文主要包括以下内容: 注册百度AI人脸识别API账号 创建小程序项目 开发小程序人脸识别功能 测试小程序 注册百度AI人脸识别API账号 注册百度AI人脸识别API账号是使用人脸识别功能的第一步。请根据以下…

    PHP 2023年5月23日
    00
  • Codeigniter校验ip地址的方法

    下面是 Codeigniter 校验 IP 地址的方法攻略: 目录 准备工作 获取 IP 地址 判断 IP 地址合法性 示例说明 准备工作 在 Codeigniter 中使用 IP 地址校验方法,需要先加载安全辅助函数,可以在控制器中使用以下代码来加载: $this->load->helper(‘security’); 获取 IP 地址 Code…

    PHP 2023年5月23日
    00
  • PHP缓存机制Output Control详解

    PHP缓存机制Output Control详解 什么是Output Control Output Control是PHP缓存机制的一种,它可以缓存输出的内容并在需要时输出。它通过输出缓冲区来实现。输出缓冲区是一个内存区域,可以暂时存储需要输出到浏览器的内容。 在开启Output Control之后,所有的输出都将被存储在缓冲区中,直到缓冲区被显式地清空或脚本…

    PHP 2023年5月26日
    00
  • php 表单数据的获取代码

    获取表单数据是在 PHP 中非常常见的任务。在提交表单之后,你需要从表单提交的数据中获取并使用这些数据。使用 PHP,以下是获取表单数据的完整攻略: 第一步:为提交表单设置 action 属性 在你的表单标签中设置 action 属性,并将其设置为提交表单时要处理数据的 PHP 文件的名称。例如: <form action="submit.p…

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