2017-03-16 10 views
2

私は簡単なブログを作成しています。同じブレードを使用して記事を編集し追加しようとしています。同じブレードを使用してコンテンツを追加および編集するベストプラクティス

私はそれを動作させることができましたが、私がやっているやり方はかなり奇妙だと思います。 ブレードif(!empty($article))または{{$article->title or ''}}に使用する必要があります。

もっと良い方法がありますか?それらを混ぜようとするのは悪い習慣ですか?ここで

はより良く理解

<form method="post" action="/blog/{{$article->id or ''}}"> 
    {{ csrf_field() }} 
    @if(!empty($article)) 
    <input type="hidden" name="_method" value="PUT"> 
    @endif 
    <input type="text" name="title" class="form-control" value="{{$article->title or ''}}" /> 
    <textarea name="content" class="form-control">{{$article->content or ''}}</textarea> 
    <button type="submit">Envoyer</button> 
</form> 

答えて

1

のための私の追加/編集/ブレードの作成/編集フォーム場合でほぼ同じで、一つのビューとの両方の形態のための1つのモデルメソッドを使用することをお勧めします。

<form method="post" action="{{ route('article.'.(isset($article) ? 'update' : 'store')) }}"> 
    {{ csrf_field() }} 
    <input type="hidden" name="_method" value="{{ isset($article) ? 'PUT' : 'POST' }}"> 
    <input type="text" name="title" class="form-control" value="{{ $article->title or '' }}" /> 
    <textarea name="content" class="form-control">{{ $article->content or ''}}</textarea> 
    <button type="submit">Envoyer</button> 
</form> 

これを処理する別のクールな方法は、Laravel Collectiveパッケージを使用することです。このような状況に最適な機能はform model bindingです。

モデルでは、通常、新しいオブジェクトの作成と既存のオブジェクトの更新の両方を処理できるupdateOrCreate()を使用します。

+0

私に 'updateOrCreate()'メソッドを教えてもらえますか? –

+0

@Baldráni(https://laravel.com/docs/5.4/eloquent#other-creation-methods) –

+0

あなたはupdateOrCreate()を使ってどのようにしているかの例を持っています: –

関連する問題