2013-10-28 2 views
1

У меня есть проблемы с маршрутом с Laravel. Я думаю, это потому, что я не беру хороший метод, но ...Laravel 4 -> Маршруты на одном контроллере с несколькими переменными

Вот мой код:

Route::group(array('prefix' => 'products'), function() 
{ 
    Route::get('', array('uses'=>'[email protected]')); 
    //show all the products 

    Route::get('{Categorie}',array('uses'=>'[email protected]'))->where('Categorie','^[A-Z][a-z0-9_-]{3,19}$'); 
    //show the products of this categorie 

    Route::get('{shopname}',array('uses'=>'[email protected]'))->where('shopname','^[a- z][a-z0-9_-]{3,19}$'); 
    //show the product of this shopname 
}); 

Route::group(array('prefix' => '/products/{:any}'), function() 
{ 
    //no index because productName is not optionnal 

    Route::get('{productName}', array('uses'=>'[email protected]')); 
    //the Product controller is now SINGULAR 
    //show this product in particular 
}); 

Так он работает в первой группе ... mysite.fr/products => оК mysite.fr/MyCategorie => оК mysite.fr/mashopname => оК

но когда я добавить второй, как в параметре:

mysite.fr/products/myshopname/myfirstproduct

у меня есть ошибка witouht конкретное сообщение ...

Большое спасибо за вашу помощь!

ответ

0

Проблема здесь в том, что это все те же маршруты. Laravel не знает, что будет считаться категорией, именем магазина или любым. Например, если я перейду к /products/test, Laravel не будет знать, является ли тест категорией, именем магазина или именем продукта.

Попробуйте это вместо того, чтобы ...

Route::group(array('prefix' => 'products'), function() 
{ 
    Route::get('/', array('uses'=>'[email protected]')); 
    //show all the products 

    Route::get('categorie/{Categorie}',array('uses'=>'[email protected]'))->where('Categorie','^[A-Z][a-z0-9_-]{3,19}$'); 
    //show the products of this categorie 

    Route::get('shopname/{shopname}',array('uses'=>'[email protected]'))->where('shopname','^[a- z][a-z0-9_-]{3,19}$'); 
    //show the product of this shopname 

    Route::get('product/{productName}', array('uses'=>'[email protected]')); 
    //the Product controller is now SINGULAR 
}); 

Таким образом, если я пойду в products/categorie/test, Laravel будет знать, что я ищу для categorie и быть в состоянии маршрутизировать меня соответствующим образом.

Update:

Если Hightech категория и product_1 является продуктом, вы можете использовать маршрут как это ...

Route::get('category/{categorie}/product/{product}',array('uses'=>'[email protected]'))->where('categorie','^[A-Z][a-z0-9_-]{3,19}$')->where('product','^[A-Z][a-z0-9_-]{3,19}$'); 
    //show the products of this categorie 

И тогда URL будет .com/products/category/Hightech/product/product_1. Или вы можете взять /product и /category, и вы могли бы просто пойти в .com/products/Hightech/product_1

+0

Я думал об этом, но моя идея состояла в том, чтобы сохранить имя магазина/категорию в URL-адресе. Как вы идете дальше .com/products/Hightech/then you go on .com/products/Hightech/product_1. Я пробовал это-> «Маршрут :: get ('/ {: any}/{productName}', array (' использует '=>' продукта @ getProduct '));» но все еще ошибка ... – pierreaurelemartin

+0

Я только что обновил ответ, чтобы вы могли использовать такой URL-адрес. – user1669496

Смежные вопросы