2015-11-30 58 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