0

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 アプリで登録済みのルートを表示するにはどうすればよいですか?

またはさらに良いです。自動ロードされたサービス プロバイダーのメソッドにアクセスするにはどうすればよいですか?

4

3 に答える 3

0

以下は、コントローラ内からアーティザン コマンドを呼び出す方法のサンプルです。

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あり、パラメータを渡していません。

于 2013-09-10T06:15:54.853 に答える
0

extends Illuminate\Foundation\Console\RoutesCommandを使用してメソッドを実行できるクラスを作成する必要があると思いますprint_r($this->getRoutes());

于 2013-09-09T20:51:51.940 に答える
0

次のようにすべてのルートを取得できます。

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

foreach($routes as $name => $route)
{
    //do your stuff
}
于 2013-10-20T01:01:52.517 に答える