ホームページ >バックエンド開発 >PHPチュートリアル >Laravel 5 の基本 (11) - サブビューとフォームの再利用
Laravel 5 の基本 (11) - サブビューとフォームの再利用
記事の編集の問題に対処する必要があります。もちろん、次のように新しいルートを手動で追加することもできます:
<code>Route::get('/articles/{id}/edit', '[email protected]');</code>
コマンドラインで artisan
または route:list
を使用して、現在のルートを表示します:
<code>php artisan route:list</code>
RESTful準拠の場合は、laravelのresource
ルートを直接使用するのが良い選択かもしれませんが、すべてのルートを削除し、唯一の
<code>Route::resource('articles', 'ArticlesController');</code>
を再度追加します。<code>php artisan route:list</code>を使用します。 > ルートを表示すると、期待どおりのルートが多数生成されています。それぞれの項目を注意深く見てください。
次に、コントローラーにメソッドを追加します。
<code> public function edit($id) { $article = Article::findOrFail($id); return view('articles.edit', compact('article')); }</code>
次に、ビューを作成します
<code>@extends('layout')@section('content') <h1>Edit: {!! $article->title !!} </h1> <hr/> ...</code>
わかりました。これらのコードが create.blade.php
からコピーされたことを認めます。が出てきて少し修正されましたが、問題はそれを繰り返す必要があるかということです。この問題については後で扱います。ここではフォーム送信の問題を見てみましょう。ルーティング内の <code>php artisan route:list</code> をもう一度見て、PATCH
メソッドを使用して変更します。ビューを変更しましょう:
<code>{!! Form::open(['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!} </code>
ブラウザで /articles/1/edit
にアクセスし、ソース コードを確認して、laravel を見つけます。自動的に _method=PATCH
の隠しフィールドが生成されます。
問題の 1 つは、記事を編集しても記事の情報が表示されないことです。
<code> {!! Form::model($article, ['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!}</code>
OK、published_on
フィールド以外はすべて問題ありません。はまだ現在の日付に設定されているため、後で処理します。
次に、コントローラーにメソッドを追加します。
<code> public function update($id, \Illuminate\Http\Request $request) { $article = Article::findOrFail($id); $article->update($request->all()); return redirect('articles'); }</code>
変更プロセス中に検証する必要もあります。Request クラスを再利用し、CreateArticleRequest
の名前をより一般的な の場合は、ArticleRequest
メソッドのパラメーターを変更することを忘れないでください。 store
<code> public function update($id, Requests\ArticleRequest $request) { $article = Article::findOrFail($id); $article->update($request->all()); return redirect('articles'); }</code>現在残っている問題は、新規コードと編集コードが表示エラーなどほとんど同じコードを使用していることですが、それらは 2 つのコピーに存在するため、この問題を修正しましょう。
の直下に新しいファイル views/articles
を作成し、list.blade.php
からエラー処理コードをコピーします。 create.blade.php
<code>@if ($errors->any()) cd0746da7a38070ec057adf3f5ca9b12 @foreach($errors->all() as $error) 25edfb22a4f469ecb59f1190150159c6{{ $error }}bed06894275b65c1ab86501b08a632eb @endforeach 929d1f5ca49e04fdcb27f9465b944689@endif</code>
では、次のステートメントを使用します。エラー処理コード: create.blade.php
<code>@include('articles.list')</code>フォーム コードをもう一度扱います。
が送信ボタンと異なる点を除いて、フォーム コードはほぼ同じです。ビュー form
を作成し、コードをコピーします articles/form_partial.blade.php
<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>変更
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>変更
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>