2014-01-08 36 views
1

考慮下面簡單的例子:如何在View中引用Laravel路由,以便在更改路由時不必更新所有視圖?

// 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文件別的東西我也將不得不改變每一個觀點,即使用它。

有沒有另外一種方法可以在我的視圖中引用路線,或者是否有其他可以從Laravel自然實現的良好策略?
否則我想我可能需要添加某種CONSTANT變量到我的global.php可能實現此目的。

回答

4

使用route '作爲' 參數提供一個名稱路線:

Route::get('user/profile', array('as' => 'profile', 'uses' => '[email protected]')); 

然後你只需要

<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\[email protected] |    |    | 
|  | GET home/create  | home.create | Admin\Controllers\[email protected] |    |    | 
|  | POST home   | home.store | Admin\Controllers\[email protected] |    |    | 
|  | GET home/{home}  | home.show | Admin\Controllers\[email protected] |    |    | 
|  | GET home/{home}/edit | home.edit | Admin\Controllers\[email protected] |    |    | 
|  | PUT home/{home}  | home.update | Admin\Controllers\[email protected] |    |    | 
|  | PATCH home/{home} |    | Admin\Controllers\[email protected] |    |    | 
|  | DELETE home/{home} | home.destroy | Admin\Controllers\[email protected] |    |    | 
+--------+----------------------+--------------+------------------------------------------+----------------+---------------+ 

所以你使用構建路徑:

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

請注意,您的組前綴adminpanel不會被添加到您的路由名稱中,您不必使用它。您需要創建路線的是Name列中顯示的命令artisan routes的確切名稱。

使用刀片你可以做

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

乾淨多了,對不對?

+0

安東尼奧,你可以重寫我的例子實現您的解決方案,以確保我理解正確嗎?注意我也在使用路由組和過濾器。 – prograhammer

+0

@DavidGraham這些被稱爲命名路線:http://laravel.com/docs/routing#named-routes – treeface

+0

剛剛編輯給你一個使用你的resouceful路線的例子。 –

1

你的問題的最佳解決方案是使用命名的路線,如安東尼奧建議。 您也可以使用link_to_route幫助程序生成指向路由的完整HTML鏈接。

瞭解網址助手的信息可以在這裏找到:關於命名路由http://laravel.com/docs/helpers#urls

更多信息可以在這裏找到:http://laravel.com/docs/routing#named-routes

+0

+1謝謝,我還沒有做到URL助手。一直忙着設置事情。 'link_to_route'看起來非常有用。欣賞它! – prograhammer

相關問題