在Laravel 4中讓我說我有這兩條路線。第一條路線在數據庫中尋找一個slu and,如果沒有找到slu go,則轉到其他路線。這是可能的,我將如何使其工作?Laravel 4路線調節
Route::get('{slug}', '[email protected]');
Route::get('/about', '[email protected]');
在Laravel 4中讓我說我有這兩條路線。第一條路線在數據庫中尋找一個slu and,如果沒有找到slu go,則轉到其他路線。這是可能的,我將如何使其工作?Laravel 4路線調節
Route::get('{slug}', '[email protected]');
Route::get('/about', '[email protected]');
您可以讓路由獲取URL上的任何內容,並且您可以檢查它是否存在。
如果蛞蝓存在,不僅僅是打電話[email protected]
如果塞不存在,它被設置爲任何旁邊「大約」,比我們會重定向到同一條路線與約設爲蛞蝓參數所以下一次,在你的數據庫中沒有記錄,在路線上的slu is大概是slu about。
希望是有道理的。
Route::get('{slug}', function($slug){
//Check if slug exists, if yes than do
$slug_exists = true;
if($slug_exists){
return Controller::call("[email protected]");
}else if(!$slug_exists && $slug == 'about'){
return Controller::call("[email protected]");
}else{
return Redirect::to("/about");
}
});
在你的控制器,檢查你的對象的存在後,如果需要返回重定向到你的第二個途徑。
class SlugController extends BaseController {
public function getBySlug($slug) {
$obj = getObjectBySlug($slug);
if (!obj) {
return Redirect::to("/about");
}
}
}
但是如果輸入的網址是「/ about」。如果在db中不存在循環,則會得到一個循環 – lukasgeiter 2014-10-20 14:31:58
如果用戶輸入'/ about',則它們被路由到另一個方法而不是'SlugController @ getBySlug'! – 2014-10-20 14:38:07
如果使用OP提供的路線,則不應該。他的'{slug}'路線只是抓住了一切。 – lukasgeiter 2014-10-20 14:40:08
如果你只是想使用靜態about
頁,你需要在你的路由的這種情況下,變更指令:
Route::get('/about', '[email protected]');
Route::get('{slug}', '[email protected]');
現在,如果網址是about
就會去AboutController
,否則會到SlugController
如果在數據庫中找不到slu You,您必須在'SlugController @ getBySlug'中檢查並重定向到'AboutController @ index'。 – Jerodev 2014-10-20 14:27:32
在我看來,你想要的東西根本不是(可以)用laravel輕鬆實現的。我沒有詳細看它,但也許你想給[這個軟件包](https://github.com/cviebrock/eloquent-sluggable)試一試 – lukasgeiter 2014-10-20 14:37:02
澄清:是否有可能是一個綽號「約」存在? – lukasgeiter 2014-10-20 14:50:34