在Laravel 4中使用特定的服务提供商

时间:2013-09-09 20:28:56

标签: php laravel service-provider

Laravel 4附带php artisan routes命令。这显示了命令行上已注册路由的列表。我希望在控制器中获取其值,而不是在命令行上显示已注册的路由。

以下方法完全符合我的要求:

Illuminate\Foundation\Console\RoutesCommand()

不幸的是,这是受保护的方法,因此当我尝试这样的事情时无效

$rc = new Illuminate\Foundation\Console\RoutesCommand(new Illuminate\Routing\Router);

print_r($rc->getRoutes());

如何访问此方法以在Laravel 4应用程序中显示已注册的路线?

甚至更好;如何访问任何自动加载服务提供商的方法?

3 个答案:

答案 0 :(得分:0)

我相信您必须创建一个extends Illuminate\Foundation\Console\RoutesCommand的类,然后您可以使用print_r($this->getRoutes());

运行该方法

答案 1 :(得分:0)

以下是如何从Controller内部调用Artisan命令的示例:

use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\Output;
use Illuminate\Console\Application as ConsoleApplication;

class MyOutput extends Output {

    protected $contents = '';

    protected function doWrite($message, $newline)
    {
        $this->contents .= $message . ($newline ? "\n" : '');
    }

    public function __toString()
    {
        return $this->contents;
    }
}

class MyController extends BaseController {

    public function getRoutes()
    {
        $app = app();
        $app->loadDeferredProviders();
        $artisan = ConsoleApplication::start($app);

        $command = $artisan->find('routes');
        $input = new ArrayInput(array('command' => 'routes'));
        $output = new MyOutput();

        $command->run($input, $output);
        return '<pre>' . $output . '</pre>';
    }

}

在这种情况下,Artisan命令为routes,我们没有向其传递任何参数。

答案 2 :(得分:0)

你可以得到这样的所有路线:

$routes = App::make('router')->getRoutes();

foreach($routes as $name => $route)
{
    //do your stuff
}