【问题标题】:Best practice to use same blade to add and edit content使用相同刀片添加和编辑内容的最佳实践
【发布时间】:2017-08-07 06:34:52
【问题描述】:

我正在创建一个简单的博客,并尝试使用相同的刀片来编辑和添加文章。

我已经设法让它工作,但我认为我这样做的方式很奇怪。 我必须在刀片中使用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>

【问题讨论】:

    标签: php laravel blade


    【解决方案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(),它可以处理创建新对象和更新现有对象。

    【讨论】:

    • 嘿,我仍然希望有一个例子来说明你如何使用 updateOrCreate() :)
    • @Baldráni updateOrCreate(['name' =&gt; 'John'], ['status' =&gt; 1]) 将使用name = John 更新行并将status 列设置为1。如果没有name = John 的行,它将创建一个新行。
    • Mezenin 刚刚意识到我从来没有回答过你,但我记得我很高兴这次你回答了我! Thx 一百年后你的时间 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多