lesichkovm/laravel-advanced-route

为 Laravel 提供的高级路由类 - 恢复框架中的隐式控制器。

v1.12.0 2024-09-26 05:59 UTC

This package is auto-updated.

Last update: 2024-09-26 06:02:31 UTC


README

适用于 Laravel 5.3, 5.4, 5.5, 5.6, 5.8, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 的高级路由,支持控制器。

背景

在 Laravel 5.3 中,高级功能 Route::controller 被移除。这个类修复了这个不足。

原因

默认路由器对于小型项目来说足够用。一旦项目开始增长,将所有可能的路由定义放在路由文件中开始变得难以理解和跟踪。很多时候,路由文件变得如此混乱,以至于开发者害怕修改/删除路由(即使这些可能未使用),以免意外破坏应用程序。

AdvancedRoute::controller 将控制权交给控制器本身,并使每个控制器对其自己的路由(目的地)负责。

使用 get/post/any 前缀指定控制器方法可以提高可读性,并允许通过查看方法轻松理解使用什么 HTTP 方法调用功能。

你的路由文件是否超出屏幕,你必须滚动才能看到所有路由?你是否将路由分割到单独的路由文件中,并将这些文件包含在一个路由文件中?你是否不习惯删除路由,因为它们可能在某处使用?你是否使用名称来“命名”你的路由?那么是时候跳出思维定势,采用高级方法了。

工作原理

高级路由允许你轻松地定义一个路由来处理控制器类中的每个操作。首先,使用 AdvancedRoute::controller 方法定义路由。控制器方法接受两个参数。第一个是控制器处理的基 URI,第二个是控制器类的名称。接下来,只需向控制器中添加方法。方法名称应该以它们响应的 HTTP 动词开头,后面跟 URI 的标题大小写版本。

<?php

namespace App\Http\Controllers;

class UserController extends Controller {
    /**
     * Responds to any (GET,POST, etc) request to /users
     */
    public function anyIndex() {
        //
    }

    /**
     * Responds to requests to GET /users/show/1
     */
    public function getShow($id) {
        //
    }

    /**
     * Responds to requests to GET /users/admin-profile
     */
    public function getAdminProfile() {
        //
    }

    /**
     * Responds to requests to POST /users/profile
     */
    public function postProfile() {
        //
    }
}

安装

a) 通过 composer(推荐)

composer require lesichkovm/laravel-advanced-route

b) 手动

将以下内容添加到你的 composer 文件中

   "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/lesichkovm/laravel-advanced-route.git"
        }
    ],
    "require": {
        "lesichkovm/laravel-advanced-route": "dev-master"
    },

用法

将以下行添加到你想映射控制器的地方

AdvancedRoute::controller('/{YOUR PATH}', '{YOUR CONTROLLER FULL NAME}');

完整示例

Route::group(['prefix' => '/', 'middleware' => []], function () {
    AdvancedRoute::controller('/auth', '\\' . \App\Http\Controllers\AuthController);
    AdvancedRoute::controller('/cms', '\\' . \App\Http\Controllers\CmsController);
    AdvancedRoute::controller('/shop', '\\' . \App\Http\Controllers\ShopController);
    Route::any('/', '\\' . \App\Http\Controllers\WebsiteController@anyIndex);
});

多个控制器映射

AdvancedRoute::controllers([
    '/auth' => '\\' . \App\Http\Controllers\AuthController,
    '/cms' => '\\' . \App\Http\Controllers\CmsController,
    '/shop' => '\\' . \App\Http\Controllers\ShopController,
]);

缺失的方法

如果你有一个带有几个预定义路由的控制器,你可以添加 missingMethod() 来处理该控制器路径的所有未定义子路径。

class WikiController extends Controller
{
    public function getIndex() { /* show main page or list of content */ }
    public function getCreate() { /* a page to add a new wiki-page */ }
    public function postCreate() { /* add a new wiki-page */ }
    public function missingMethod() { /* do anything elselook up the path in the wiki-database */ }
}

致谢

Laravel Advanced Route 能够实现,归功于所有出色的 贡献者

替代方案

如果你觉得 Laravel 太臃肿、太慢?是的,告诉我!你想要走纯 PHP 的路线?好吧,这里有一些值得注意的包,允许你保留 Laravel 路由的便利之处

https://github.com/mrjgreen/phroute