如何在我的视图中引用Laravel路由,这样如果我更改路由,我将不必更新所有视图?

时间:2014-01-08 00:50:57

标签: php url routing laravel laravel-4

考虑以下简单示例:

// routes.php 

  // You can get this route by http://localhost/adminpanel/home ...users...etc
  Route::group(array('prefix' => 'adminpanel', 'before' => 'auth'), function(){
      Route::resource('home', 'Admin\Controllers\HomeController');
      Route::resource('users', 'Admin\Controllers\UsersController');
  });


// Admin\Views\users.php
  <!-- I do not want to update this everytime I change the route -->
  <a href="<?=URL::to('adminpanel/home');?>">Click here to go home</a>

如果我将 adminpanel 更改为 routes.php 中的其他内容,我还必须更改使用它的每个View。

有没有其他方法可以在我的观点中引用这条路线,还是我可以自然地从Laravel实施其他任何好策略?
否则我在想我可能需要在我的 global.php 中添加一些CONSTANT变量来实现这一点。

2 个答案:

答案 0 :(得分:4)

使用route'as'参数为您的路线命名:

Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));

然后你必须

<a href="<?=URL::route('profile');?>">Click here to go home</a>

使用您的资源路线,您可以列出它们

php artisan routes

并使用路线的名称,第三栏。

使用您的示例,您将拥有2条基本路线:家庭和用户,这是家庭资源的列表:

+--------+----------------------+--------------+------------------------------------------+----------------+---------------+
| Domain | URI                  | Name         | Action                                   | Before Filters | After Filters |
+--------+----------------------+--------------+------------------------------------------+----------------+---------------+
|        | GET home             | home.index   | Admin\Controllers\HomeController@index   |                |               |
|        | GET home/create      | home.create  | Admin\Controllers\HomeController@create  |                |               |
|        | POST home            | home.store   | Admin\Controllers\HomeController@store   |                |               |
|        | GET home/{home}      | home.show    | Admin\Controllers\HomeController@show    |                |               |
|        | GET home/{home}/edit | home.edit    | Admin\Controllers\HomeController@edit    |                |               |
|        | PUT home/{home}      | home.update  | Admin\Controllers\HomeController@update  |                |               |
|        | PATCH home/{home}    |              | Admin\Controllers\HomeController@update  |                |               |
|        | DELETE home/{home}   | home.destroy | Admin\Controllers\HomeController@destroy |                |               |
+--------+----------------------+--------------+------------------------------------------+----------------+---------------+

所以你将使用以下方法构建该路线:

<a href="<?=URL::route('home.index');?>">Click here to go home</a>

请注意,您的组前缀adminpanel不会添加到您的路由名称中,您也不必使用它。创建路径所需的是命令artisan routesName列中显示的确切名称。

使用Blade你可以做到

{{ link_to_route('home.index', 'Click here to go home') }}

更干净,对吧?

答案 1 :(得分:1)

解决问题的最佳方法是使用像Antonio建议的命名路线。 您还可以使用link_to_route帮助程序生成指向路径的完整HTML链接。

有关网址助手的更多信息,请访问:http://laravel.com/docs/helpers#urls

有关命名路线的更多信息,请访问:http://laravel.com/docs/routing#named-routes