您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Laravel框架中怎么設置路由,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
Laravel框架中的路由如何設置
基本路由
您的應用程序的絕大多數路由將在app/routes.php文件中定義。Laravel中最簡單的路由由一個URI和一個閉包調用組成。
基本GET路由
Route::get('/',function()
{
return'HelloWorld';
});
基本POST路由
Route::post('foo/bar',function()
{
return'HelloWorld';
});
注冊一個路由以響應所有HTTP方法
Route::any('foo',function()
{
return'HelloWorld';
});
強制一個路由必須通過HTTPS訪問
Route::get('foo',array('https',function()
{
return'MustbeoverHTTPS';
}));
經常您需要根據路由產生URLs,您可以通過使用URL::to方法:
$url=URL::to('foo');
路由參數
Route::get('user/{id}',function($id)
{
return'User'.$id;
});
可選的路由參數
Route::get('user/{name}',function($name=null)
{
return$name;
});
帶默認值的可選的路由參數
Route::get('user/{name}',function($name='John')
{
return$name;
});
帶正則表達式約束的路由
Route::get('user/{name}',function($name)
{
//
})
->where('name','[A-Za-z]+');
Route::get('user/{id}',function($id)
{
//
})
->where('id','[0-9]+');
路由過濾器
路由過濾器提供了一種限制訪問指定路由的簡單的方法,這在您需要為您的站點創建需要認證區域的時候非常有用。Laravel框架中包含了一些路由過濾器,比如auth過濾器、auth.basic過濾器、guest過濾器、以及csrf過濾器。它們被存放在app/filters.php文件中。
定義一個路由過濾器
Route::filter('old',function()
{
if(Input::get('age')<200)>'old',function()
{
return'Youareover200yearsold!';
}));
為一個路由指定多個路由過濾器
Route::get('user',array('before'=>'auth|old',function()
{
return'Youareauthenticatedandover200yearsold!';
}));
指定路由過濾器參數
Route::filter('age',function($route,$request,$value)
{
//
});
Route::get('user',array('before'=>'age:200',function()
{
return'HelloWorld';
}));
當路由過濾器接收到作為第三個參數的響應$response:
Route::filter('log',function($route,$request,$response,$value)
{
//
});
基本路由過濾器的模式
您可能希望根據URI為一組路由指定過濾器。
Route::filter('admin',function()
{
//
});
Route::when('admin/*','admin');
在上面的例子中,admin過濾器將應用帶所有以admin/開頭的路由。星號作為一個通配符,將適配到所有字符的組合。
您也可以通過指定HTTP方法約束模式過濾器:
Route::when('admin/*','admin',array('post'));
過濾器類
對于高級的過濾器,您可以使用一個類代替閉包函數。因為過濾器類是位于應用程序之外的IoC容器,您能夠在過濾器中使用依賴注入,更易于測試。
定義一個過濾器類
classFooFilter{
publicfunctionfilter()
{
//Filterlogic...
}
}
Laravel框架中的路由如何設置
注冊一個基于類的過濾器
Route::filter('foo','FooFilter');
命名路由
命名路由在更易于在生成跳轉或URLs時指定路由。您可以像這樣為路由指定一個名字:
Route::get('user/profile',array('as'=>'profile',function()
{
//
}));
您也可以為控制器的方法指定路由名字:
Route::get('user/profile',array('as'=>'profile','uses'=>
'UserController@showProfile'));
現在您在生成URLs或跳轉的時候使用路由的名字:
$url=URL::route('profile');
$redirect=Redirect::route('profile');
您可以使用currentRouteName方法獲取一個路由的名字:
$name=Route::currentRouteName();
路由組
有些時候您可能希望應用過濾器到一組路由。您不必要為每個路由指定過濾器,可以使用路由組:
Route::group(array('before'=>'auth'),function()
{
Route::get('/',function()
{
//HasAuthFilter
});
Route::get('user/profile',function()
{
//HasAuthFilter
});
});
子域名路由
Laravel路由也能夠處理通配符的子域名,并且從域名中獲取通配符參數:
注冊子域名路由
Route::group(array('domain'=>'{account}.myapp.com'),function()
{
Route::get('user/{id}',function($account,$id)
{
//
});
});
路由前綴
一組路由可以通過在屬性數組中使用prefix選項為路由組添加前綴:
為路由組添加前綴
Route::group(array('prefix'=>'admin'),function()
{
Route::get('user',function()
{
//
});
});
路由模型綁定
模型綁定提供了一個簡單的方法向路由中注入模型。比如,不僅注入一個用戶的ID,您可以根據指定的ID注入整個用戶模型實例。首先使用Route::model方法指定所需要的模型:
為模型綁定一個變量
Route::model('user','User');
然后,定義一個包含{user}參數的路由:
Route::get('profile/{user}',function(User$user)
{
//
});
因為我們已經綁定{user}參數到User模型,一個User實例將被注入到路由中。因此,比如一個profile/1的請求將注入一個ID為1的User實例。
注意:假如在數據庫中沒有找到這個模型實例,將引發404錯誤。
假如您希望指定您自己定義的沒有找到的行為,您可以為model方法傳遞一個閉包作為第三個參數:
Route::model('user','User',function()
{
thrownewNotFoundException;
});
有時您希望使用自己的方法處理路由參數,可以使用Route::bind方法:
Route::bind('user',function($value,$route)
{
returnUser::where('name',$value)->first();
});
引發404錯誤
有兩種方法在路由中手動觸發一個404錯誤。首先,您可以使用App::abort方法:
App::abort(404);
其次,您可以拋出一個Symfony\Component\HttpKernel\Exception\NotFoundHttpException的實例。
更多關于處理404異常和為這些錯誤使用使用自定義響應的信息可以在錯誤章節中找到。
路由至控制器
Laravel不僅允許您路由至閉包,也可以路由至控制器類,甚至允許創建資源控制器。
看完上述內容,你們對Laravel框架中怎么設置路由有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。