多个控制器/页面的相同路径

时间:2013-01-06 13:43:12

标签: php routes laravel

我正在与Laravel开发电子商务。这就是我所坚持的:

这是类别链接的样子:

  

mysite.com/category_name

     

mysite.com/category_name [/ probable_sub_category_name]

这就是产品链接的样子:

  

mysite.com/product_name

     

mysite.com [/ probable_category_name] [/ probable_sub_category_name] / PRODUCT_NAME

我设置了这样的路线:

Route::get(array('(:any)', '(:all)/(:any)'), array('before' => 'is_category', 'uses' => 'categories@index'));
Route::get(array('(:any)', '(:all)/(:any)'), array('before' => 'is_product', 'uses' => 'products@index'));

如果我首先放置产品路线,类别链接会中断,如果我首先放置类别路线,产品链接会按预期中断。如何为两者使用相同的路由?

我的PHP版本是5.3.10-1ubuntu3.4(phpinfo())

1 个答案:

答案 0 :(得分:2)

神奇的是Controller :: call()方法。这是解决方案:

Route::get(array('(:any)', '(:all)/(:any)'), function () {

    // Current URI as array
    $parameters = Request::route()->parameters;

    // Checks if given parameter is a product's url value
    $check_if_product = function ($parameter) {
        $products = Product::where('url_title', '=', $parameter)->count('id');
        return (is_numeric($products) && $products > 0 ? true : false);
    };

    // Checks if given parameter is a category's url value
    $check_if_category = function ($parameter) {
        $categories = Category::where('url_title', '=', $parameter)->count('id');
        return (is_numeric($categories) && $categories > 0 ? true : false);
    };

    // If last parameter from URI belongs to a product
    if ($check_if_product(end($parameters)))
    {
        return Controller::call('products@index');
    }
    // If last parameter from URI belongs to a category
    elseif ($check_if_category(end($parameters)))
    {
        return Controller::call('categories@index');
    }
    else
    {
        return Response::error('404');
    }

});