2017-03-22 1 views
0

Im Moment erstelle ich einen Blog in Laravel, um PHP/Laravel zu lernen. Das Problem ist, dass im bekommen:MethodNotAllowedException, wenn ich auf die Schaltfläche klicke, um zu einer anderen Ansicht umzuleiten

MethodNotAllowedHttpException in RouteCollection.php Linie 218:

ich eine Tabelle, wo ich alle Beiträge mit den Tasten „Ansicht“ zeigen und „Edit“ für jeden Beitrag. Sie leiten die entsprechende Ansicht mit der id um und sie funktionieren gut. Wenn ich einen Beitrag zur Ansicht öffne, gibt es auch eine Schaltfläche zum Bearbeiten und hier bekomme ich den Fehler, wenn ich darauf klicke und ich weiß nicht warum.

show.blade.php // dies ist der "View" für den Posten

<div class="row"> 
    <div class="col-md-8"> 
     <h1>{{ $post->title }}</h1> 

     <p class="lead">{{ $post->body }}</p> 
    </div> 

    <div class="col-md-4"> 
     <div class="well"> 
      <dl class="dl-horizontal"> 
       <dt>Created at:</dt> 
       <dd>{{ date('d M, y H:i', strtotime($post->created_at)) }}</dd> 
      </dl> 
      <dl class="dl-horizontal"> 
       <dt>Last Updated:</dt> 
       <dd>{{ date('d M, y H:i', strtotime($post->updated_at)) }}</dd> 
      </dl> 
      <hr> 
      <div class="row"> 
       <div class="col-sm-6"> 
        <form method="POST" action="{{ route('posts.edit', $post->id) }}"> 
         <input type="submit" value="Edit" class="btn btn-primary btn-block"> 
         <input type="hidden" name="_token" value="{{ Session::token() }}"> 
        </form> 
       </div> 
       <div class="col-sm-6"> 
        <form method="POST" action="{{ route('posts.destroy', $post->id) }}"> 
         <input type="submit" value="Delete" class="btn btn-danger btn-block"> 
         <input type="hidden" name="_token" value="{{ Session::token() }}"> 
        </form> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

edit.blade.php

<div class="row"> 
    <form method="POST" action="{{ route('posts.update', $post->id) }}"> 
     <div class="row"> 
     <div class="col-md-8"> 
      <div class="form-group"> 
       <label for="title">Title:</label> 
       <textarea type="text" class="form-control input-lg" id="title" name="title" rows="1" 
          style="resize:none;">{{ $post->title }}</textarea> 
      </div> 
      <div class="form-group"> 
       <label for="body">Body:</label> 
       <textarea type="text" class="form-control input-lg" id="body" name="body" 
          rows="5">{{ $post->body }}</textarea> 
      </div> 
     </div> 
     <div class="col-md-4"> 
      <div class="well"> 
       <dl class="dl-horizontal"> 
        <dt>Created at:</dt> 
        <dd>{{ date('M j, Y h:i:sa', strtotime($post->created_at)) }}</dd> 
       </dl> 

       <dl class="dl-horizontal"> 
        <dt>Last updated:</dt> 
        <dd>{{ date('M j, Y h:i:sa', strtotime($post->updated_at)) }}</dd> 
       </dl> 
       <hr> 
       <div class="row"> 
        <div class="col-sm-6"> 
         <a href="{{ route('posts.show', $post->id) }}" class="btn btn-danger btn-block">Back</a> 
        </div> 
        <div class="col-sm-6"> 
         <button type="submit" class="btn btn-success btn-block">Save</button> 
         <input type="hidden" name="_token" value="{{ Session::token() }}"> 
     {{ method_field('PUT') }} 
        </div> 
       </div> 
      </div> 
     </div> 
     </div> 
    </form> 
</div> 

PostController.php // Dies ist der Controller, wenn Sie es auch benötigen

class PostController extends Controller { 

public function index() 
{ 
    // 
    $posts = Post::all(); 

    return view('posts/index')->withPosts($posts); 
} 

public function create() 
{ 
    // return create new post form 
    return view("posts/create"); 
} 

public function store(Request $request) 
{ 
    // Validate data 
    $this->validate($request, array(
     'title' => 'required|max:255', 
     'body' => 'required' 
    )); 

    // store data in db 
    $post = new Post; 

    $post->title = $request->title; 
    $post->body = $request->body; 

    $post->save(); 

    Session::flash('success', 'The blog post was successfully saved!'); 

    // redirect if succesfull 
    return redirect()->route('posts.show', $post->id); 
} 

public function show($id) 
{ 
    // 
    $post = Post::find($id); 

    // redirect to view 
    return view('posts/show')->with('post', $post); 

} 

public function edit($id) 
{ 
    // 
    $post = Post::find($id); 

    return view('posts/edit')->with('post', $post); 
} 

public function update(Request $request, $id) 
{ 
    // 
} 

public function destroy($id) 
{ 
    // 
} 
} 
+0

Und Ihre Routen? –

+0

Können Sie Ihre Routen angeben? Wahrscheinlich verwenden Sie eine falsche Methode in Ihren Routen (erhalten statt Post). –

+0

'Route :: get ('Kontakt', 'SeitenController @ getContact'); Route :: get ('über', 'SeitenController @ getAbout'); Route :: get ('/', 'SeitenController @ getIndex'); Route :: Ressource ('Beiträge', 'PostController'); ' – Denisx

Antwort

2

Das ist, weil Sie ein Formular verwenden, die das Verfahren als POST definiert haben, aber die Route als GET definiert:

Ändern Sie es an:

<form method="GET" action="{{ route('posts.edit', $post->id) }}"> 
    <input type="submit" value="Edit" class="btn btn-danger btn-block"> 
</form> 

Auch könnten Sie einen Link statt eines verwenden form:

<a href="{{ route('posts.edit', $post->id) }}" class="btn btn-danger btn-block">Edit</a> 
+1

Ja .. ich bin so blind. Vielen Dank. – Denisx

Verwandte Themen