考虑以下简单示例:
// 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变量来实现这一点。
答案 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 routes
在Name
列中显示的确切名称。
使用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