2017-01-28 5 views
0

Ich versuche, einen Datensatz zu einer Datenbank mit einem Ressourcen-Controller hinzufügen, aber ich bekomme MethodNotAllowedHttpException Fehler. Ich benutze eine Pivot-Tabelle. Ich habe einige ähnliche Fragen wie a link! aber keiner scheint mir zu antworten. Dies ist mein Code:Laravel 5.3 throw MethodNotAllowedHttpException on Store mit Restfull-Controller

routes.php

Route::group(['prefix' => 'user'], function() { 
    Route::resource('categories', 'User\CategoriesController'); 
}); 

CategoriesController.php

<?php 

    namespace App\Http\Controllers\User; 
    use Session; 
    use Sentinel; 
    use Illuminate\Http\Request; 
    use App\Http\Controllers\Controller; 
    use App\Models\Sections; 
    use App\Models\Categories; 
    use App\Models\Users; 
    use App\Models\CategorieUser; 

    class CategoriesController extends Controller 
    { 
     public function __construct() 
     { 

     $this->middleware('sentinel.auth'); 
     } 

     public function index() 

     { 
     $categories = Categories::all(); 
     return view('user.categories.index', ['categories' => $categories]); 
     } 

     public function create() 
     { 
     $sections = sections::all(); 
     return view('user.categories.create', ['sections' => $sections]); 
     } 

     public function store(Request $request) 
     { 
     // records in table categories 
     $categories = new Categories(); 
     $categories->name = $request->name; 
     $categories->sections_id = $request->sections_id; 
     $categories->save(); 

     // records in pivot table users_categories 
     $user = Sentinel::getUser()->id; 
     $users_categories = new CategorieUser(); 
     $users_categories->user_id = $user; 
     $users_categories->categorie_id = $categories->id; 
     $users_categories->save(); 
     return redirect()->route('categories.index'); 
     } 
    } 

Dies ist die Form:

<form action="store" method="POST"> 

     <div class="form-group"> 

     <label for="section">Choose section:</label> 

     <select class="form-control" name="sections_id"> 
     @foreach($sections as $section) 
        <option value="{{ $section->id }}">{{ $section->name }}</option> 
     @endforeach 
      </select> 
     </div> 


     <div class="form-group"> 
     <label for="name">Category name:</label> 

     <input type="text" class="form-control" name="name" required> 


     </div> 
     <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
     <button type="submit" class="btn btn-default">Submit</button> 
     </form> 

Dies ist Modell categories.php

<?php 

    namespace App\Models; 
    use Illuminate\Database\Eloquent\Model; 

    class Categories extends Model 
    { 
     public function sections() 
     { 
     return $this->belongsTo('App\Models\Sections'); 
     } 

     public function users() 
     { 
     return $this->belongsToMany('App\Models\Users', 'categorie_user'); 
     } 
    } 

Und das ist das Modell users.php:

<?php 

    namespace App\Models; 
    use Illuminate\Database\Eloquent\Model; 

    class Users extends Model 
    { 
    public function categories() 
     { 
    return $this->belongsToMany('App\Models\Categories', 'categorie_user'); 
     } 
    } 

Wenn ich diese Strecke unter Routen hinzufügen, wie oben

Route::group(['prefix' => 'user'], function() { 
    Route::resource('categories', 'User\CategoriesController'); 
    Route::post('categories/store', ['uses' => 'User\[email protected]']); 
    }); 

dann funktioniert alles wie am Schnürchen. Ich bin ein Neuling in Laravel, aber ich denke, dass alles ohne diese Route funktionieren muss, weil ich einen Restful Controller verwende. Irgendwelche Vorschläge werde ich schätzen. Vielen Dank.

Antwort

0

Änderung der Aktionsform "/ user/Kategorien" wie

<form action="/user/categories" method="POST">

+0

Danke für die Antwort! Ich habe das schon ausprobiert, und ich habe es jetzt wieder versucht, aber es funktioniert nicht. Irgendwelche anderen Vorschläge? Danke –

+0

Versuchen Sie "php artisan route: list", um alle Routen zu sehen. –

+0

Ich habe alle Routen mit diesem Befehl überprüft und habe diese Route: POST | Benutzer/Kategorien | categories.store | App \ Http \ Controller \ Benutzer \ CategoriesController @ Store | web, sen. Ich verliere den ganzen Tag, um das herauszufinden, ich kann es nicht glauben. –

0

Schließlich finde ich die Antwort. Laut RESTfull Resource Controller muss die URL für die Formularaktion die Hauptroute sein, nicht/store oder/create. Also in Form Aktion schrieb ich:

<form action="/user/categories" method="POST"> 

Und das hat für mich funktioniert. Wie auch immer, danke für die Hilfe. Ich hoffe, das wird jemandem helfen.

Verwandte Themen