2017-05-22 1 views
0

Das ist mein Routing:Laravel, Routing

Route::get('/', '[email protected]'); 

Route::get('/product/{id_product}', '[email protected]'); 
Route::get('/kontact', '[email protected]'); 


Route::get('/login', '[email protected]') 
Route::post('/login', '[email protected]'); 
Route::get('/logout', '[email protected]'); 

Route::get('/register', '[email protected]'); 
Route::post('/register', '[email protected]'); 

Route::get('/panel', '[email protected]'); 
Route::get('/panel/data', '[email protected]'); 
Route::post('/panel/data', '[email protected]'); 


Route::get('/panel/orders', '[email protected]'); 
Route::post('/panel/orders/add', '[email protected]'); 

Route::post('/cart/add', '[email protected]'); 
Route::post('/cart/remove', '[email protected]'); 
Route::get('/cart', '[email protected]'); 


Route::get('/{categoryName}', '[email protected]'); 
Route::get('/{categoryName}/{subcategoryName}','[email protected]'); 

Jetzt i meiner Meinung nach Code-Link haben Artikel meinem Warenkorb hinzugefügt:

<h4><a class="shopBtn" href="/cart/add" title="add to cart"> Add to cart </a> </h4> 

Aber, wenn ich auf diese CLIC ich dann gab Alarm: in dieser

ErrorException in Category.php line 16: 
Trying to get property of non-object 

und ich denke, dass Kategorie müssen, ist nicht und ich nehme an, dass dies ein href in einer seiner Route wird:

Route::get('/{categoryName}', '[email protected]'); 

Gibt es eine Möglichkeit, es zu beheben? Vielleicht eine Aktion zu einem href hinzufügen? Ich bin ziemlich sicher, dass dieses Modell, das in meinem Fehler aufgerufen wird, nicht mit etwas verbunden ist, was ich jetzt tun möchte.

My Category Modell:

class Category extends Model 
{ 
protected $table = 'zoo'; 
public $timestamps = false; 

public function getCategoryId($name) 
{ 

    $category = Category::select('id')->where('name', $name)>first(); 

    return $category->id; 


} 

}

Aber mein CartController sollte mich diese Ansicht zurückkehren

public function addItem() 
    { 

    return View('cart'); 

} 

Und ich denke, es don/t hier sowieso bekommen

+1

Was ist der Inhalt von 'Category.php'? Ist das dein 'StoreController'? – Tom

+1

'/ cart/add' erwartet eine Post-Anfrage und Sie und die Weitergabe einer Anfrage über' a href' – linktoahref

+0

Ich denke, Sie versuchen, Wert zu bekommen, wo es nicht existiert, können Sie category.php Code teilen? –

Antwort

1

Ihre Kategorie Routen ist ein Fang alle Route. Dadurch werden alle Routen mit einem ähnlichen Pfad abgefangen, wenn sie nicht definiert oder definiert sind. In diesem Fall erfüllt der /cart/add Pfad die Bedingung für /{categoryName}/{subcategoryName}, so dass die [email protected] aufgerufen wird. Sie müssen sie entfernen oder verschieben, um Routenkonflikte zu vermeiden.

Route::get('/{categoryName}', '[email protected]'); 
Route::get('/{categoryName}/{subcategoryName}','[email protected]'); 

könnte wahrscheinlich auch

ändern
Route::get('/category/{categoryName}', '[email protected]'); 
Route::get('/category/{categoryName}/{subcategoryName}','[email protected]'); 

Sie die GET Route für /cart/add fehlt. Wahrscheinlich brauchen Sie diese Routen.

Route::get('/cart/add', '[email protected]'); 
Route::post('/cart/add', '[email protected]'); 
+0

Ich dachte schon! aber ich wusste nicht, wie ich es beheben sollte. Jetzt funktioniert es wirklich. Danke! – wenus

+0

'Dies überschreibt alle anderen Routen mit dem ähnlichen Pfad, da diese unten definiert sind. Tatsächlich ist das Gegenteil der Fall - weil es unten ist, wird ** nur ** alle Anfragen erfassen, die sonst nicht übereinstimmen über. Die Routen werden der Reihe nach vom Anfang der Datei an abgeglichen. Der Grund dafür, dass sie in diesem Fall übereinstimmten, ist bcs. Für diesen URI wurde keine GET-Route definiert. Sie müssen sie nicht verschieben oder aktualisieren, zumindest nicht, um dieses Problem zu lösen - wenn Sie dies tun, erhalten Sie nur eine 404, da es jetzt überhaupt keine passende Route gibt. –

+0

@ Don'tPanic aber ich habe versucht, Post zu ändern, um zu bekommen, und ich hatte immer noch das gleiche Problem. URL ändern, löse dies. – wenus

1

Ihre "Add to cart" -Link ist ein einfacher <a href=''> Link, also klickt man auf einen GET Anfrage /cart/add. Aber die einzige definierte Route für diesen URI ist für POST:

Route::post('/cart/add', '[email protected]'); 

So ist es nicht übereinstimmt, und die nächste mögliche Übereinstimmung ist Ihre Wildcard /{categoryName} Route, die etwas zu fangen.

Sie müssen entweder:

  • -Update auf dem Link Hinzufügen des Warenkorb statt zu tun, ein POST-/cart/add, zum Beispiel vielleicht ein Formular mit einer Add to cart Schaltfläche hinzufügen, oder vielleicht einige JS den Klick zu fangen und zu tun ein AJAX POST;

  • oder hinzufügen GET Route für /cart/add, und haben diese Methode Griff Produkte über GET statt POST Zugabe;