2017-11-06 16 views
0

Laravelのネストされたカテゴリと単一のアイテムを持つ電子商取引のようなルーティングを構築しようとしていますが、これはかなり効果的ですが大きな例外があります。Laravelの動的ルートの問題

これは私のルート・ファイルの重要な部分である:

Route::get('/', '[email protected]')->name('Home'); 
Route::get('/{category}', '[email protected]')->where('category', '.+')->name('Category'); 
Route::get('/{slug}/{item_id?}', '[email protected]')->name('Item'); 

あなたが見ることができるように、カテゴリとアイテムのためのロジックは、2つの異なるコントローラに分離されています。

カテゴリのものはwww.page.com/categoryまたはwww.page.com/category/subcategory、さらにはwww.page.com/category/subcategory/subsubcategoryのようなURLパターンでうまく機能します。

しかし、www.page.com/item-slugまたはwww.page.com/item-slug/12345のアイテムを呼び出そうとすると、スクリプトは常にカテゴリルートを使用します。しかし、成功しません...

... 
public function getRouteKeyName() 
{ 
    return 'slug'; 
} 

:私の項目のモデルでは

は、私はまた、ルートキー名を上書きしました。

希望、私を助けることができますか、またはこれまで同様の問題があった。

+0

いくつのカテゴリがありますか?カテゴリの数が非常に限られている場合は、正規表現パターンを使用してカテゴリに一致させることができます。 –

+0

各カテゴリに応じて、1から5までの子カテゴリがあります。しかし、カテゴリのルーティングは問題ありません。私は、なぜアイテムルーティングがカテゴリパターンを使用するのか不思議です。 –

+0

カテゴリregexpパターン。+は任意の文字の組み合わせに一致するので、カテゴリの代わりにアイテムにルーティングする必要があることをルータに伝えるのは誰ですか? – Benni

答えて

0

これは本当に悪いアプローチです。あなたは、多くの理由(あなたはそれをGoogleすることができます)のすべてのルートのプレフィックスを使用する方が良いです。たとえば、

Route::get('/', '[email protected]')->name('Home'); 
Route::get('/categoryPrefix/{category}', '[email protected]')>where('category', '.+')->name('Category'); 
Route::get('/itmPrefix/{slug}/{item_id?}', '[email protected]')->name('Item'); 

これらのルートに定義済みのプレフィックスを付けてアクセスします。

+0

まあ、私はそうは思わない。多くの成功したシステムがこのアプローチを使用しています。 –

+0

えええええええええええええええええええええええええええええ –

+0

そして、「たくさんのシステムがそれを使用するので、私はそれを使うつもりです」のような議論は決してしません。長期的にはあなたのプロジェクトに影響を与えます。 –