Laravel 5.5 CRUD 表单选择的正确方法

Posted

技术标签:

【中文标题】Laravel 5.5 CRUD 表单选择的正确方法【英文标题】:Laravel 5.5 correct way for a CRUD form select 【发布时间】:2018-06-30 13:29:11 【问题描述】:

所以我有这个 CRUD,我使用相同的表单来创建和编辑条目。 我需要几种形式的选择,在创建(该特定字段还没有数据)时,我选择显示占位符,但是在编辑时,我选择显示存储在数据库中的特定 id 字段的任何内容。所以我有: 控制器:

...
 public function create()
    
        $house = houses::pluck('name', 'id');
        //$thisclient = null;
        $clients = client::pluck('last_name', 'id');
        $reps = user::where('role_id', 5)->orderBy('first_name')->get()->pluck('full_name', 'id');

        return view('prospects.create', compact('house', 'clients', 'reps'));
    

...

public function edit($id)
    
        $house = houses::pluck('name', 'id');
        //$thisclient = user::whereId($id)->first();
        $clients = client::pluck('last_name', 'id');
        $reps = user::where('role_id', 5)->orderBy('first_name')->get()->pluck('full_name', 'id');

        $prospect = Prospect::findOrFail($id);

        return view('prospects.edit', compact('prospect', 'house', 'clients', 'reps'));
    

和我的视图形式: 为创造工作:

!!Form::select('client_id', $clients, null, ['class' => 'form-control', 'placeholder' => 'Please Select'] ) !!

编辑工作:

!! Form::select('client_id', $clients, $prospect->client_id, ['class' => 'form-control'] ) !!

我在这里遇到了2个问题,如果我有null作为我的选择字段,它不会将选择的数据带到edit,如果我有$prospect->client_id,它将在@987654327上返回错误@因为还没有数据。 我试图通过在控制器上创建一个变量 $thishouse 并将其传递给查看返回 view('prospects.create', compact('house', 'thisclient','clients', 'reps')); 和查看 Form::select('client_id', $clients, $thisclient, ['class' => 'form-control'] ) !! 来解决这个问题,但是当有多个表单选择时似乎有点脏......

第二个麻烦是如果我在编辑上留下一个占位符,它将显示占位符,而不是 $prospect->client_id 本身。

实现所有这些并使用相同的表单进行创建和编辑的最佳和最简单的方法是什么? 谢谢

【问题讨论】:

【参考方案1】:

您可以使用 Form::open 和 Form::model 来创建和编辑。例如,您可以在视图中设置:

@if(isset($prospect))
    !! Form::model($prospect, ['action' => ['ProspectController@update', $prospect->id], 'method' => 'patch']) !!
@else
    !! Form::open(array('action' => 'ProspectController@store', 'method' => 'POST')) !!
@endif

然后你可以像这样创建选择:

!! Form::select('client_id', $clients, old('client_id'), ['class' => 'form-control'] ) !!

所以,当你在编辑时,Laravel 会从模型函数的变量中选择属性。

由于你使用的是 Laravel 5.5,你也可以使用 @isset 指令。

【讨论】:

谢谢拉尔特。今晚会试一试,让你知道它是怎么回事。但似乎是我一直在寻找的 好的!我多次使用此代码,对我来说效果很好。如果您有任何问题,请告诉我! 我现在看到您正在创建两个视图文件createedit。使用此代码,大多数情况下您只能为两者创建一个文件。

以上是关于Laravel 5.5 CRUD 表单选择的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 发送电子邮件没有响应 smtp.gmail.com #10060

Laravel 5.5 - 同时验证多个表单请求

Laravel 5.5 阻止表单提交按 Enter

Laravel 5.5 密码重置令牌表单未出现

Laravel 5.5 FormRequest 自定义表单请求验证类

在 laravel 中更新时,我的选择表单返回 null