Laravel 5-Grundlagen (11) – Unteransichten und Formularwiederverwendung

WBOY
Freigeben: 2016-08-08 09:26:41
Original
947 Leute haben es durchsucht

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>
Nach dem Login kopieren

Verwenden wir artisan oder route:list in der Befehlszeile, um unsere aktuellen Routen anzuzeigen:

<code>php artisan route:list</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Erstellen Sie jetzt die Ansicht

<code>@extends('layout')

@section('content')
    <h1>Edit: {!! $article->title !!} </h1>

    <hr/>

    ...</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Ersetzen Sie in create.blade.php einfach den Fehlerbehandlungscode durch die folgende Anweisung:

<code>@include('articles.list')</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Ä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>
Nach dem Login kopieren

Ä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>
Nach dem Login kopieren

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.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!