1

Laravelでeコマースを開発しています。これが私が立ち往生しているものです:

カテゴリリンクは次のようになります。

mysite.com/category_name

mysite.com/category_name [/ probable_sub_category_name]

そして、これは製品リンクがどのように見えるかです:

mysite.com/product_name

mysite.com [/ problem_category_name] [/ problem_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()と言います)

4

1 に答える 1

3

魔法は 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');
    }

});
于 2013-04-23T15:26:54.110 に答える