Php 如何通过artisan命令访问路由器?

Php 如何通过artisan命令访问路由器?,php,laravel,Php,Laravel,我需要在正常运行和启动所有服务提供商时访问Laravel拥有的RouteCollection。我需要RouteCollection,因为遗留应用程序需要知道Laravel是否有特定的路由,所以如果没有,遗留代码可以处理路由 我想如果我能在artisan命令中获得illighted\Routing\Router,我只需调用getRoutes()函数并输出一个包含所有路由数组的JSON文件。然后,当遗留代码需要确定Laravel是否支持路由时,它可以读取该文件 但是为了做到这一点,我需要访问Rout

我需要在正常运行和启动所有服务提供商时访问Laravel拥有的RouteCollection。我需要RouteCollection,因为遗留应用程序需要知道Laravel是否有特定的路由,所以如果没有,遗留代码可以处理路由

我想如果我能在artisan命令中获得
illighted\Routing\Router
,我只需调用
getRoutes()
函数并输出一个包含所有路由数组的JSON文件。然后,当遗留代码需要确定Laravel是否支持路由时,它可以读取该文件

但是为了做到这一点,我需要访问Router类。我不知道如何做到这一点。。。我查看了
illumb\Foundation\Console\routeCommand
源代码,但不知道它是如何工作的。真正奇怪的是,看起来好像正在注入Router类,但当我执行
Artisan::resolve('MyCommand')
时,我得到了一个空的RouteCollection

编辑

我从来没有想过如何解决这个问题,但是对于那些处于类似情况的人,我发现这在很大程度上是可行的,尽管我不确定仅仅为了检查路由而启动每个请求的开销有多大。现在看起来没那么多

// Start laravel, so we can see if it should handle the request
require_once(__DIR__.'/laravel/bootstrap/autoload.php');
$app = require_once(__DIR__.'/laravel/bootstrap/start.php');
$app->boot();

// Create the fake request for laravel router
$request = Request::createFromGlobals();
$request->server->set('PHP_SELF', '/laravel/public/index.php/'.$_REQUEST['modname']);
$request->server->set('SCRIPT_NAME', '/laravel/public/index.php');
$request->server->set('SCRIPT_FILENAME', __DIR__.'/laravel/public/index.php');
$request->server->set('REQUEST_URI', '/laravel/public/'.$_REQUEST['modname']);

$routes = Route::getRoutes();

foreach($routes as $route) {
    if ($route->matches($request)) {
        $app->run($request);
        exit;
    }
}

下面是一个简化的实现

JsonRoutes.php


你是说
工匠路线
?要获取所有命令列表,请检查artisan列表
artisan routes
几乎满足了我的要求,但并不完全满足,这就是我尝试基于它构建自定义artisan命令的原因。我的目标是生成一个JSON文件,非laravel代码可以解析并检测laravel是否能够处理给定的路由。非常好用!谢谢都德:D。我有一个类似的解决方案,不知道那里发生了什么:P一定是把我的分支搞砸了。
Artisan::resolve('JsonRoutes');
$ artisan routes:json [{"methods":"GET,HEAD","host":null,"uri":"\/","name":null,"action":"Closure"}] $ artisan routes:json -f /tmp/routes.json