Wir müssen uns mit der Bearbeitung von Artikeln befassen. Natürlich können wir neue Routen manuell hinzufügen, so:
<code>Route::get('/articles/{id}/edit', 'ArticleController@edit');</code>
Verwenden wir artisan
oder route:list
in der Befehlszeile, um unsere aktuellen Routen anzuzeigen:
<code>php artisan route:list</code>
Im Falle der RESTful-Konformität kann es eine gute Wahl sein, die resource
-Route von Laravel direkt zu verwenden. Wir werden jedoch alle Routen entfernen und nur die einzige hinzufügen:
<code>Route::resource('articles', 'ArticlesController');</code>
Verwenden Sie <code>php artisan route:list</code> erneut, um die Routen anzuzeigen. Wow, es werden eine Menge Routen generiert, die unseren Erwartungen entsprechen. Schauen Sie sich jeden Artikel genau an.
Fügen Sie nun die Methode im Controller hinzu:
<code> public function edit($id) { $article = Article::findOrFail($id); return view('articles.edit', compact('article')); }</code>
Erstellen Sie jetzt die Ansicht
<code>@extends('layout') @section('content') <h1>Edit: {!! $article->title !!} </h1> <hr/> ...</code>
Okay, ich gebe zu, dass diese Codes alle von create.blade.php
kopiert und geändert wurden. Die Frage ist, müssen wir sie wiederholen? Wir werden uns später mit diesem Problem befassen. Schauen wir uns nun das Problem der Formularübermittlung an. Schauen Sie im Routing <code>php artisan route:list</code> noch einmal nach. Die Änderung verwendet die Methode PATCH
. Ändern wir die Ansicht:
<code>{!! Form::open(['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!} </code>
Besuchen Sie /articles/1/edit
im Browser, überprüfen Sie den Quellcode und stellen Sie fest, dass Laravel automatisch das versteckte Feld von _method=PATCH
generiert.
Ein Problem besteht darin, dass wir den Artikel bearbeiten, die Artikelinformationen jedoch nicht angezeigt werden: Ändern wir die Ansicht:
<code> {!! Form::model($article, ['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!}</code>
OK, alles ist in Ordnung, außer dass das Feld published_on
immer noch auf das aktuelle Datum eingestellt ist, wir kümmern uns später darum.
Fügen Sie nun die Methode im Controller hinzu:
<code> public function update($id, \Illuminate\Http\Request $request) { $article = Article::findOrFail($id); $article->update($request->all()); return redirect('articles'); }</code>
Wir müssen während des Änderungsprozesses auch unsere Request-Klasse erneut verwenden und CreateArticleRequest
in eine allgemeinere ArticleRequest
umbenennen. Vergessen Sie nicht, die Parameter in der store
-Methode zu ändern.
<code> public function update($id, Requests\ArticleRequest $request) { $article = Article::findOrFail($id); $article->update($request->all()); return redirect('articles'); }</code>
Das verbleibende Problem besteht nun darin, dass unser neuer und bearbeiteter Code größtenteils denselben Code verwenden, z. B. Anzeigefehler, es jedoch zwei Kopien davon gibt. Lassen Sie uns dieses Problem beheben.
Wir erstellen eine neue Datei views/articles
direkt unter list.blade.php
und kopieren den Fehlerbehandlungscode aus create.blade.php
:
<code>@if ($errors->any()) <ul class="alert alert-danger"> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> @endif</code>
Ersetzen Sie in create.blade.php
einfach den Fehlerbehandlungscode durch die folgende Anweisung:
<code>@include('articles.list')</code>
Befassen wir uns noch einmal mit dem Formularcode. Der Formularcode ist fast derselbe, bis auf form
, der sich von der Schaltfläche „Senden“ unterscheidet. Wir erstellen eine Ansicht articles/form_partial.blade.php
und kopieren den Code
<code><div class="form-group"> {!! Form::label('title', 'Title:') !!} {!! Form::text('title', null, ['class' => 'form-control']) !!} </div> <div class="form-group"> {!! Form::label('body', 'Body:') !!} {!! Form::textarea('body', null, ['class' => 'form-control']) !!} </div> <div class="form-group"> {!! Form::label('published_at', 'Publish On:') !!} {!! Form::input('date', 'published_at', date('Y-m-d'), ['class' => 'form-control']) !!} </div> <div class="form-group"> {{--这里要设置变量,依据是编辑还是修改来改变,当然也可以不放置在partial中--}} {!! Form::submit($submitButtonText, ['class' => 'btn btn-primary form-control']) !!} </div></code>
Ändern create.blade.php
<code>@extends('layout') @section('content') <h1>Write a New Article</h1> <hr/> @include('articles.list') {{--使用我们添加的 illuminate\html 开源库--}} {!! Form::open(['url' => 'articles']) !!} @include('articles.form_partial', ['submitButtonText' => 'Add Article']) {!! Form::close() !!} @stop</code>
Ändern edit.blade.php
<code>@extends('layout') @section('content') <h1>Edit: {!! $article->title !!} </h1> <hr/> @include('articles.list') {{--使用我们添加的 illuminate\html 开源库--}} {!! Form::model($article, ['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!} @include('articles.form_partial', ['submitButtonText' => 'Update Article']) {!! Form::close() !!} @stop</code>
Das Obige hat die Grundlagen von Laravel 5 (11) vorgestellt – Unteransicht und Formularwiederverwendung, einschließlich einiger Aspekte davon. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.