programing tip

Laravel에 등록 된 경로 경로 목록을 얻는 방법은 무엇입니까?

itbloger 2020. 12. 6. 21:15
반응형

Laravel에 등록 된 경로 경로 목록을 얻는 방법은 무엇입니까?


Laravel 4 내에서 등록 된 경로 경로로 배열을 만드는 방법을 찾고 싶었습니다.

기본적으로 다음과 같은 목록을 반환하려고합니다.

/
/login
/join
/password

Route::getRoutes()경로 정보와 리소스가 포함 된 개체를 반환하는 메서드 를 발견했지만 경로 정보가 보호되고 정보에 직접 액세스 할 수 없습니다.

이것을 달성하는 다른 방법이 있습니까? 아마도 다른 방법일까요?


Route::getRoutes()를 반환합니다 RouteCollection. 각 요소 $route->getPath()에서 현재 경로의 경로를 가져 오는 간단한 작업을 수행 할 수 있습니다 .

각 보호 된 매개 변수는 표준 getter로 가져올 수 있습니다.

루핑은 다음과 같이 작동합니다.

$routeCollection = Route::getRoutes();

foreach ($routeCollection as $value) {
    echo $value->getPath();
}

콘솔 명령을 사용할 수 있습니다.

질문에서 묻는 Laravel 4

php artisan routes

Laravel 5 더 실제

php artisan route:list


도우미 (라 라벨 4) :

Usage:
 routes [--name[="..."]] [--path[="..."]]

Options:
 --name                Filter the routes by name.
 --path                Filter the routes by path.
 --help (-h)           Display this help message.
 --quiet (-q)          Do not output any message.
 --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for     more verbose output and 3 for debug
 --version (-V)        Display this application version.
 --ansi                Force ANSI output.
 --no-ansi             Disable ANSI output.
 --no-interaction (-n) Do not ask any interactive question.
 --env                 The environment the command should run under.

Laravel 5의 경우 artisan 명령을 사용할 수 있습니다.

php artisan route:list대신 php artisan routes.


각 경로와 해당 세부 정보를 html 테이블에 나열하는 경로를 만들었습니다.

Route::get('routes', function() {
    $routeCollection = Route::getRoutes();

    echo "<table style='width:100%'>";
        echo "<tr>";
            echo "<td width='10%'><h4>HTTP Method</h4></td>";
            echo "<td width='10%'><h4>Route</h4></td>";
            echo "<td width='10%'><h4>Name</h4></td>";
            echo "<td width='70%'><h4>Corresponding Action</h4></td>";
        echo "</tr>";
        foreach ($routeCollection as $value) {
            echo "<tr>";
                echo "<td>" . $value->getMethods()[0] . "</td>";
                echo "<td>" . $value->getPath() . "</td>";
                echo "<td>" . $value->getName() . "</td>";
                echo "<td>" . $value->getActionName() . "</td>";
            echo "</tr>";
        }
    echo "</table>";
});

//Laravel >= 5.4

//Controller index()
$app = app();
$routes = $app->routes->getRoutes();
return view ('Admin::routes.index',compact('routes'));

//view
<table id="routes-table" class="table table-bordered table-responsive">
       <thead>
                <tr>
                    <th>uri</th>
                    <th>Name</th>
                    <th>Type</th>
                    <th>Method</th>
                </tr>
       </thead>
       <tbody>
                @foreach ($routes as $route )
                    <tr>
                        <td>{{$route->uri}}</td>
                        <td>{{$route->getName()}}</td>
                        <td>{{$route->getPrefix()}}</td>
                        <td>{{$route->getActionMethod()}}</td>
                    </tr>
                @endforeach
        </tbody>
</table>

가독성을 높이는 더 좋은 방법은 경로를 등록하고 장인 출력으로 직접 웹 브라우저에 인쇄하는 것입니다.

Route::get('routes', function() {
     \Artisan::call('route:list');
     return \Artisan::output();
});

/ login / {id}와 같은 경로를 컴파일하고 접두사 만 원하는 경우 :

foreach (Route::getRoutes() as $route) {
    $compiled = $route->getCompiled();
    if(!is_null($compiled))
    {
        var_dump($compiled->getStaticPrefix());
    }
}

     $routeList = Route::getRoutes();

    foreach ($routeList as $value)
    {
        echo $value->uri().'<br>';
    }

Illuminate \ Support \ Facades \ Route를 사용합니다.

Laravel 5.4에서는 100 % 작동합니다.


암호

라 라벨 <= 5.3

/** @var \Illuminate\Support\Facades\Route $routes  */
$routes = Route::getRoutes();
foreach ($routes as $route) {
    /** @var \Illuminate\Routing\Route $route  */
    echo $route->getPath() .  PHP_EOL;
}

라 라벨> = 5.4

/** @var \Illuminate\Support\Facades\Route $routes  */
$routes = Route::getRoutes();
foreach ($routes as $route) {
    /** @var \Illuminate\Routing\Route $route  */
    echo $route->uri. PHP_EOL;
}

장인

라 라벨 4

php artisan routes

라 라벨 5

php artisan route:list

나는 예쁜 배열을 얻었다 이것으로, 시도하십시오

$routeCollection = json_decode(json_encode(Route::getRoutes()->get(),true),true);
dd($routeCollection);

예를 들어 등록 된 모든 경로 이름원한다고 가정하면 다음과 같이 가져올 수 있습니다.

foreach ($routeCollection as $key => $value) {
     if(array_key_exists('as',$value['action'])){
        dump($value['action']['as']);
   }
}

Laravel 5 플러그인 과 함께 Oh-my-zsh 를 사용하는 사용자를위한 콘솔 명령

la5routes

Laravel 5.4. *의 경우이 코드는 잘 작동합니다.

Route::get('routes', function() {
$routeCollection = Route::getRoutes();

echo "<table style='width:100%'>";
    echo "<tr>";
        echo "<td width='10%'><h4>HTTP Method</h4></td>";
        echo "<td width='10%'><h4>Route</h4></td>";
        echo "<td width='10%'><h4>Name</h4></td>";
        echo "<td width='70%'><h4>Corresponding Action</h4></td>";
    echo "</tr>";
    foreach ($routeCollection as $value) {
        echo "<tr>";
            echo "<td>" . $value->methods()[0] . "</td>";
            echo "<td>" . $value->uri() . "</td>";
            echo "<td>" . $value->getName() . "</td>";
            echo "<td>" . $value->getActionName() . "</td>";
        echo "</tr>";
    }
echo "</table>";
});

참고URL : https://stackoverflow.com/questions/18394891/how-to-get-a-list-of-registered-route-paths-in-laravel

반응형