ホームページ >バックエンド開発 >PHPチュートリアル >Laravel 5 の基本 (11) - サブビューとフォームの再利用

Laravel 5 の基本 (11) - サブビューとフォームの再利用

WBOY
WBOYオリジナル
2016-06-13 12:17:28914ブラウズ

Laravel 5 の基本 (11) - サブビューとフォームの再利用

記事の編集の問題に対処する必要があります。もちろん、次のように新しいルートを手動で追加することもできます:

<code>Route::get(&#39;/articles/{id}/edit&#39;, &#39;[email&#160;protected]&#39;);</code>

コマンドラインで artisan または route:list を使用して、現在のルートを表示します:

<code>php artisan route:list</code>

RESTful準拠の場合は、laravelのresourceルートを直接使用するのが良い選択かもしれませんが、すべてのルートを削除し、唯一の

<code>Route::resource(&#39;articles&#39;, &#39;ArticlesController&#39;);</code>

を再度追加します。<code>php artisan route:list</code>を使用します。 > ルートを表示すると、期待どおりのルートが多数生成されています。それぞれの項目を注意深く見てください。

次に、コントローラーにメソッドを追加します。

<code>    public function edit($id) {        $article = Article::findOrFail($id);        return view(&#39;articles.edit&#39;, compact(&#39;article&#39;));    }</code>

次に、ビューを作成します

<code>@extends(&#39;layout&#39;)@section(&#39;content&#39;)    <h1>Edit: {!! $article->title !!} </h1>    <hr/>    ...</code>

わかりました。これらのコードが create.blade.php からコピーされたことを認めます。が出てきて少し修正されましたが、問題はそれを繰り返す必要があるかということです。この問題については後で扱います。ここではフォーム送信の問題を見てみましょう。ルーティング内の <code>php artisan route:list</code> をもう一度見て、PATCH メソッドを使用して変更します。ビューを変更しましょう:

<code>{!! Form::open([&#39;method&#39; => &#39;PATCH&#39;, &#39;url&#39; => &#39;articles/&#39; . $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(&#39;articles&#39;);    }</code>

変更プロセス中に検証する必要もあります。Request クラスを再利用し、CreateArticleRequest の名前をより一般的な の場合は、ArticleRequest メソッドのパラメーターを変更することを忘れないでください。 store

<code>    public function update($id, Requests\ArticleRequest $request) {        $article = Article::findOrFail($id);        $article->update($request->all());        return redirect(&#39;articles&#39;);    }</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(&#39;title&#39;, &#39;Title:&#39;) !!}    {!! Form::text(&#39;title&#39;, null, [&#39;class&#39; => &#39;form-control&#39;]) !!}</div><div class="form-group">    {!! Form::label(&#39;body&#39;, &#39;Body:&#39;) !!}    {!! Form::textarea(&#39;body&#39;, null, [&#39;class&#39; => &#39;form-control&#39;]) !!}</div><div class="form-group">    {!! Form::label(&#39;published_at&#39;, &#39;Publish On:&#39;) !!}    {!! Form::input(&#39;date&#39;, &#39;published_at&#39;, date(&#39;Y-m-d&#39;), [&#39;class&#39; => &#39;form-control&#39;]) !!}</div><div class="form-group">    {{--这里要设置变量,依据是编辑还是修改来改变,当然也可以不放置在partial中--}}    {!! Form::submit($submitButtonText, [&#39;class&#39; => &#39;btn btn-primary form-control&#39;]) !!}</div></code>
変更

create.blade.php

<code>@extends(&#39;layout&#39;)@section(&#39;content&#39;)    <h1>Write a New Article</h1>    <hr/>    @include(&#39;articles.list&#39;)    {{--使用我们添加的 illuminate\html 开源库--}}    {!! Form::open([&#39;url&#39; => &#39;articles&#39;]) !!}        @include(&#39;articles.form_partial&#39;, [&#39;submitButtonText&#39; => &#39;Add Article&#39;])    {!! Form::close() !!}@stop</code>
変更

edit.blade.php

<code>@extends(&#39;layout&#39;)@section(&#39;content&#39;)    <h1>Edit: {!! $article->title !!} </h1>    <hr/>    @include(&#39;articles.list&#39;)    {{--使用我们添加的 illuminate\html 开源库--}}    {!! Form::model($article, [&#39;method&#39; => &#39;PATCH&#39;, &#39;url&#39; => &#39;articles/&#39; . $article->id]) !!}    @include(&#39;articles.form_partial&#39;, [&#39;submitButtonText&#39; => &#39;Update Article&#39;])    {!! Form::close() !!}@stop</code>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。