2016-05-25 2 views
1
Route::get('/', '[email protected]'); 
Route::get('wiki/{category_slug}', '[email protected]'); 
Route::get('wiki/{category_slug}/{article_slug}', '[email protected]'); 
Route::resource('wiki/article', 'ArticleController'); 

Lorsque je tente d'accéder wiki/article/create, je reçois ce message d'erreur: Trying to get property of non-object et il semble utiliser la 3ème voie at ArticleController->show('article', 'create').itinéraire Laravel en utilisant le contrôleur incorrect

Est-ce que/quelles contraintes a-t-il besoin sur la 3ème route (et 2ème puisque wiki/article pour le stockage n'utiliserait pas non plus le bon contrôleur)?

+1

Comment est-ce lié regex? –

+0

Veuillez indiquer le code "ArticleController". –

+0

@ThomasAyoub bien je pensais que vous deviez ajouter une contrainte (qui est regex) à la route pour exclure le mot 'article' de' {category} 'afin qu'il puisse aller à la bonne route – frosty

Répondre

0

Lorsque vous essayez http://domain.com/wiki/article/create, votre code est à la recherche de vos itinéraires et de trouver que:

Route::get('wiki/{category_slug}/{article_slug}','[email protected]'); 

Est-ce que vous demandez, comme {category_slug} et {article_slug} ont pas contraintes et peut être quoi que ce soit, y compris "article" et "créer".

Essayez de changer cette adresse de route:

Route::get('wiki/category/{category_slug}', '[email protected]'); 
    Route::get('wiki/category/{category_slug}/article/{article_slug}', '[email protected]'); 

De cette façon, vous aurez des itinéraires uniques pour différents contrôleurs.

Si vous voulez vraiment utiliser l'adresse que vous pouvez ajouter une contrainte regex au mot « article », comme ceci:

Route::get('wiki/{category_slug}', '[email protected]')->where(['category_slug'=>'\b(?:(?!article)\w)+\b']); 
    Route::get('wiki/{category_slug}/{article_slug}', '[email protected]')->where(['category_slug'=>'\b(?:(?!article)\w)+\b']); 
+0

Cela fonctionnera bien, mais il ajoute un encombrement supplémentaire à l'URI - est-il possible d'exclure le mot 'article' avec une contrainte regex pour que l'itinéraire n'essaie pas de trouver la catégorie appelée" article "? – frosty

+0

@frosty réponse mise à jour. –

+0

Merci! Fonctionne bien – frosty