Laravel 5.5正确的CRUD格式选择

时间:2018-01-21 23:15:08

标签: php forms laravel laravel-5.5 laravel-blade

所以我有这个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,它将会在create上返回错误,因为还没有数据。 我试图通过在控制器上创建一个变量$ thishouse并将其传递给返回view('prospects.create', compact('house', 'thisclient','clients', 'reps'));上的视图并查看Form::select('client_id', $clients, $thisclient, ['class' => 'form-control'] ) !!}来解决这个问题,但看起来有点脏,有多个表单选择......

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用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指令。