2015-11-30 56 views
3

我有兩個網址的一個類別和一個品牌,如:同樣的路線,但在Laravel 5.1調用不同的控制器路由

http://localhost/project/womens-fashion #category 
http://localhost/project/babette-clothes #brand 

我只是想一個路線,但調用不同的控制器。 我已經寫了路線,但它不適合我的發送錯誤。請參見下面的代碼:

<?php 
use \DB; 
use Illuminate\Routing\UrlGenerator; 
use Illuminate\Support\Facades\Redirect; 

Route::get('/','[email protected]'); 
Route::get('/product', array('uses' => '[email protected]')); 
Route::get('/{slug}', function($slug) { 
    $result = DB::select('SELECT controller FROM url_setting where slug = ?', [$slug]); 

    if ($result[0]->pw_us_controller == '[email protected]') { 
     return Redirect::action('[email protected]', array($slug)); 
    } elseif ($result[0]->pw_us_controller == '[email protected]') { 
     return Redirect::action('[email protected]', array($slug)); 
    } else { 
     return Redirect::action('[email protected]'); 
    } 
}); 

錯誤:InvalidArgumentException in UrlGenerator.php line 576: Action App\Http\Controllers\[email protected] not defined.

我很困惑,什麼地方出了錯?任何想法!!!

+0

顯然,你沒有一個函數'視圖()'在'CategoryController'。 – Jerodev

+0

我在我的類CategoryController中有函數視圖()。如果我使用此路由:Route :: get('/ {slug}','CategoryController @ view') - > where('slug','[A-Za-z-0-9] +');它正確路由 – okconfused

+1

路由並不是要執行這樣的邏輯,你可以做的是從路由獲取/發佈單個函數上的數據,然後根據傳遞的數據將數據轉移到不同的函數中。 –

回答

3

你應該定義[email protected]的路線。

嘗試增加這樣的事情在你的路由文件:

Route::get('/category', '[email protected]'); 

---編輯---

我剛纔讀更好的問題。我相信你會獲得這樣的事情:

/womens-fashion --> [email protected] 
/babette-clothes --> [email protected] 

,你必須存儲在數據庫蛞蝓。

因此,也許重定向是不是你的解決方案。

我會做這樣的事情:

Route::get('/{slug}', '[email protected]'); 

控制器SlugController

class SlugController extends Controller 
{ 

    public function view(Request $request, $slug) 
    { 
    $result = DB::select('SELECT controller FROM url_setting where slug = ?', [$slug]); 

    if ($result[0]->pw_us_controller == '[email protected]') { 
     return self::category($request, $slug); 
    } else if ($result[0]->pw_us_controller == '[email protected]') { 
     return self::brand($request, $slug); 
    } else { 
     // redirect to home 
    } 
    } 

    private function category($request, $slug) 
    { 
    // Category controller function 
    // .... 
    } 

    private function brand($request, $slug) 
    { 
    // Brand controller function 
    // .... 
    } 

} 
+0

謝謝你解決了我的問題 – okconfused

0

你寧願使用此語法:

return redirect()->action('[email protected]', array($slug)); 
+0

對不起Amarnasan它顯示相同的錯誤。 – okconfused

+0

你是否100%確定你的CategoryController類有一個公共函數'view'函數? – Amarnasan

+0

是檢查我的類別控制器類代碼: <?php namespace App \ Http \ Controllers; 使用Illuminate \ Http \ Request; 使用App \ Http \ Requests; 使用App \ Http \ Controllers \ Controller; 使用App \ Model \ ModelCategory; 使用App \ Model \ ModelProduct; 使用App \ Functions \ Common; 使用DB; 類CategoryController延伸控制器 { 公共函數圖($蛞蝓) { \t \t回波$蛞蝓; } } – okconfused