Laravel 中的自动路由发现

Laravel

Laravel Route Discovery 是 Spatie 的一个包,用于在 Laravel 应用程序中自动发现路由。你可以在路由文件中或通过配置配置路由可以「发现」的位置:

// 在路由文件中
use Spatie\RouteDiscovery\Discovery\Discover;

Discover::controllers()->in(app_path('Http/Controllers'));

定义控制器路径后,此包将根据该路径中的控制器和方法名称生成路由 URL。例如,如果你想要一个新闻控制器,可以定义以下内容:

namespace App\Http\Controllers;

class NewsController
{
    // 路由地址是 `/news`
    public function index() { /* ... */ }

    // 路由地址是 `/news/my-method`
    public function myMethod() { /* ... */ }

    // 路由地址是 `/news/my-other-method`
    public function myOtherMethod() { /* ... */ }
}

上面的示例演示了「GET」请求,此外,这个包还提供了基于方法名称的 POST、PUT 和 PATCH 请求的约定。这个包还支持使用命名空间来确定路由的嵌套控制器。

使用这个包,你仍然可以按照 Laravel 文档中所述的传统方式注册路由。换句话说,并不是所有的路由都需要是可发现的路由。

这个包还可以将路由映射到 Blade 模板,允许你将视图文件动态映射到路由。以下是 文档 中的一个示例:

// config/route-discovery
'discover_views_in_directory' => [
    'docs' => resource_path('views/docs'),
],

/*
in `views/docs`

/docs --> index.blade.php
/docs/page-a --> pageA.blade.php
/docs/page-b --> pageB.blade.php
/docs/nested --> nested/index.blade.php
*/

这个包还包括各种 PHP 属性来自定义路由、HTTP 方法、路由名称等。查看 将控制器映射到路由 文档以获取有关可用 PHP 属性的更多详细信息。

你可以了解有关此软件包的更多信息,获取完整的安装说明,并查看 GitHub 上的源代码。请务必查看 官方文档,了解有关入门的详细信息。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/automatic-route...

译文地址:https://learnku.com/laravel/t/65560

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 11

想问问这个包的使用场景是?

2年前 评论
抄你码科技有限公司 2年前
抄你码科技有限公司 2年前

你又想回归thinkphp吗

2年前 评论
justmd5 2年前
诺墨 (楼主) 2年前
MArtian 2年前
aab

TP:老子玩剩下的你们又捡起来了!

2年前 评论

不想写路由的可以试试这个方法

如果有一个控制器的名称是ApiTestController 这个控制器里面有一个方法 version(){}

那么调用的路由是 xxx.com/api/test/version

但是这个可能会对性能有那么一点点点点点影响,不过相比带来的便捷,我选择后者

$api = app('Dingo\Api\Routing\Router');
$api->version('v1', ['namespace' => 'App\Http\Controllers\Api', 'middleware' => 'api.throttle', 'limit' => 300, 'expires' => 1], function ($route) {
    $route->group(['prefix' => 'api'], function ($transmit) {
        $transmit->any('{controller}/{func}', [
            'middleware' => checkMiddleware('api'),
            function ($controller, $func) {
                $controller = ucfirst($controller);
                $controller = 'App\\Http\\Controllers\\Api\\Api' . $controller . 'Controller';
                return app()->call($controller . '@' . $func);
            }
        ]);
    });
});
2年前 评论

开历史的倒车 :joy:

2年前 评论
czjge 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!