Laravel 5 基礎(十一)- 子視圖與表單重複使用

WBOY
發布: 2016-08-08 09:26:41
原創
947 人瀏覽過

我們需要處理編輯文章的問題。當然我們可以手工添加新的路由,就像這樣:

<code>Route::get('/articles/{id}/edit', 'ArticleController@edit');</code>
登入後複製

讓我們在命令列下使用 artisanroute: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 的隱藏欄位。

一問題是,我們編輯文章,但是文章的資訊並沒有顯示出來,我們修改一下視圖:

<code> {!! Form::model($article, ['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!}</code>
登入後複製

OK,everything's 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>
登入後複製

現在剩下的問題是我們的新建和編輯使用了大部分相同的程式碼,例如顯示錯誤,但他們存在兩份,我們來修改這個問題。

我們直接在 views/articles 下面新建文件 list.blade.php,並把錯誤處理代碼從 create.blade.php 中拷貝出來:

<code>@if ($errors->any())
    <ul class="alert alert-danger">
        @foreach($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
@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>
登入後複製

以上就介紹了Laravel 5 基礎(十一)- 子視圖和表單復用,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!