Я надеялся найти способ создания массива с зарегистрированными маршрутами маршрутов в Laravel 4.
По сути, я ищу, чтобы получить список, возвращаемый таким образом:
/
/login
/join
/password
Я столкнулся с методом Route::getRoutes()
, который возвращает объект с информацией о маршрутах, а также ресурсами, но информация о пути защищена, и я не имею прямого доступа к этой информации.
Есть ли другой способ достичь этого? Возможно, другой метод?
Route::getRoutes()
возвращает a 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
Помощники (Laravel 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.
php artisan route:list
сейчас
Для 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>
getRoutes()
Laravel getRoutes()
, затем отправляем их в template
, а затем, наконец, создаем обычную html table
с данными, проходя по всем из них. Например, мы отображаем uri eg /home
, name eg home_route
вы назначили, и другие.
Лучший способ получить его для чтения - зарегистрировать маршрут и распечатать его в веб-браузере с прямым выходом с помощью мастера.
Route::get('routes', function() {
\Artisan::call('route:list');
return \Artisan::output();
});
return '<pre>' . \Artisan::output() . '</pre>';
для лучшего форматирования.
api/
$routeList = Route::getRoutes();
foreach ($routeList as $value)
{
echo $value->uri().'<br>';
}
использовать Illuminate\Support\Facades\Route;
В Laravel 5.4 он работает, 100%
если вы скомпилировали маршруты, например /login/ {id}, и хотите только префикс:
foreach (Route::getRoutes() as $route) {
$compiled = $route->getCompiled();
if(!is_null($compiled))
{
var_dump($compiled->getStaticPrefix());
}
}
/** @var \Illuminate\Support\Facades\Route $routes */
$routes = Route::getRoutes();
foreach ($routes as $route) {
/** @var \Illuminate\Routing\Route $route */
echo $route->getPath() . PHP_EOL;
}
/** @var \Illuminate\Support\Facades\Route $routes */
$routes = Route::getRoutes();
foreach ($routes as $route) {
/** @var \Illuminate\Routing\Route $route */
echo $route->uri. PHP_EOL;
}
php artisan routes
php artisan route:list
Для 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>";
});