Heim  >  Artikel  >  Backend-Entwicklung  >  Laravel 5-Grundlagen (11) – Unteransichten und Formularwiederverwendung

Laravel 5-Grundlagen (11) – Unteransichten und Formularwiederverwendung

WBOY
WBOYOriginal
2016-08-08 09:26:41948Durchsuche

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.

Stellungnahme:
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