2017-05-25 2 views
0

‚Bearbeiten‘ Ansicht für meine Blog-Posts über die Indexansicht zugegriffen wird, die wie folgt aussieht:Laravel 5.4: REST-Controller ‚Bearbeiten‘ Ansicht der Anzeige nicht vorhandene Daten, und wirft ‚MethodNotAllowedHttpException‘ auf Update

@extends('layouts.app') 

@section('stylesheet') 
    <link rel="stylesheet" href="{{ asset('css/backend.css') }}"> 
@endsection 

@section('content') 
    <h1 class="backend_title">Viewing All Posts</h1> 
    <hr class="divider"> 
    @foreach($posts as $post) 

    <div class="backend_index-listing"> 
     <label class="backend_index-listing_title">{{ $post->title }}</label> 
     <div class="backend_route-group"> 
     <a class="backend_route" href="{{ route('posts.edit', $post) }}">Edit</a> 
     <form method="POST" action="{{ route('posts.destroy', $post) }}"> 
      {{ csrf_field() }} 
      <input type="submit" value="Delete" class="backend_route"> 
      <input type="hidden" name="_token" value="{{ Session::token() }}"> 
      {{ method_field('DELETE') }} 
     </form> 
     </div> 
    </div> 

    @endforeach 
@endsection 

die Bearbeitungsansicht wird wie folgt:

@extends('layouts.app') 

@section('stylesheet') 
    <link rel="stylesheet" href="{{ asset('css/backend.css') }}"> 
@endsection 

@section('content') 
    <h1 class="backend_title">Edit Post</h1> 
    <hr class="divider"> 
    <form class="backend_form" method="POST" action="{{ route('posts.update', $posts) }}"> 
    {{ csrf_field() }} 
    <div class="backend_form-group"> 
     <label for="title" class="backend_label">Title</label> 
     <input id="title" name="title" class="backend_input" required value="{{ $posts->title }}"> 
    </div> 
    <div class="backend_form-group"> 
     <label for="slug" class="backend_label">Slug</label> 
     <input id="slug" name="slug" class="backend_input" required value="{{ $posts->slug }}"> 
    </div> 
    <div class="backend_form-group"> 
     <label for="body" class="backend_label">{{ $posts->body }}</label> 
     <textarea id="body" name="body" class="backend_textarea" rows="40" required>{{ $posts->body }}</textarea> 
    </div> 
    <input class="backend_submit" type="submit" value="Update"> 
    <input type="hidden" name="_method" value="PUT"> 
    <input type="hidden" name="_token" value="{{ Session::token() }}"> 
    </form> 
@endsection 

Hier ist die Editierfunktion im PostsController.

public function edit(Posts $posts) 
{ 
    return view('posts.edit')->withPosts($posts); 
} 

Und die Update-Funktion.

public function update(Request $request, Posts $posts) 
{ 
    $this->validate($request, array(
    'title' => 'required|255', 
    'slug' => 'required|255', 
    'body' => 'required' 
    )); 

    $posts->title = $request->title; 
    $posts->slug = $request->slug; 
    $posts->body = $request->body; 

    $posts->save(); 

    return redirect('posts'); 
} 

Ich habe eine Test-Post, die ich durch meine create Form erstellt, so erstellen und speichern arbeiten. Es zeigt sich gut auf Index mit den Informationen, die ich will. Aber wenn ich auf die Bearbeitungsschaltfläche klicke, komme ich zu einer leeren Bearbeitungsansicht. Wenn ich die Felder bearbeite und auf die Aktualisierungsschaltfläche klicke, erhalte ich die Ausnahme "MethodNotAllowed" wie im Titel.

+0

können Sie zeigen Ihre Update-Route zu – JYoThI

+0

Es gibt keine explizite Update Route zu ändern. Ich habe Laravels Resource-Route-Syntax benutzt und 'Route :: resource ('posts', PostController)' deklariert. Es erscheint in 'php artisan route: list' mit einem URI von' posts/{post} ' – user968270

+0

Da Ihre Navigation URL mit Anchor-Tag bearbeiten. Anchor-Tag ist keine Post-Methode, also wirft es einen Methodenfehler. anstelle von anchor versuchen sie das formular mit post-methode einzureichen oder behalten sie anker und ändern sie ihre route um die methode zu erhalten. @ user968270 – JYoThI

Antwort

0

Try

href="{{ route('posts.edit', $post) }}" 

auf

href="{{ route('posts.edit', ['post' => $post]) }}" 

Hoffe, dass es Ihnen helfen, richtige Lösung zu finden :)

Verwandte Themen