2017-03-16 47 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

我添加/編輯/刀片如果創建/編輯表單是這是一個好主意,用一個視圖,併爲這兩種形式一個模型的方法幾乎相同。你可以這樣做:

<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()的例子:) –