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应用程序中显示已注册的路线?
甚至更好;如何访问任何自动加载服务提供商的方法?
答案 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
}