以相同的形式/页面更新和创建的方法

时间:2018-02-27 13:00:39

标签: php jquery laravel

我有一个表单来编辑帖子的管理员。

此表单有一些单选按钮。每个单选按钮对应一个帖子的管理员。单击某个单选按钮(管理员)时,将在表单域中填充管理员的详细信息。当"更新"单击按钮更新管理员的详细信息。

这很好。

的疑问:

但是有一个静态单选按钮,"创建新管理员",允许创建新管理员。选择此单选按钮后,表单字段将重置,以便用户可以插入值以创建新的管理员。

我怀疑的是我们如何为udpate重用这个相同的表单,它已经正常工作,但是当选择的单选按钮是"创建新的管理员时,也可以创建新的管理员"?或者,对于这种背景,什么是适当的方法?

形式:

<form method="post" class="clearfix" action="{{route('admins.update', ['id' => $post->id])}}" enctype="multipart/form-data">
    {{csrf_field()}}
    @foreach($administrators $admin)
          <div class="form-check">
            <input class="form-check-input" type="radio" name="radiobutton" id="{{$admin->id}}" value="">
            <label class="form-check-label" for="">
              {{$admin->name}}
            </label>
          </div>
    @endforeach
    <div class="form-check">
      <input class="form-check-input" type="radio" name="radiobutton" id="create_administrator"
             value="option2">
      <label class="form-check-label" for="exampleRadios2">
          Create new administrator
      </label>
  </div>
  <div class="form-group">
    <label for="name">Name</label>
    <input type="text" required class="form-control" value="{{ $admin->name }}" name="name">
  </div>

  <!-- below I have more form fields like administrator name, email, etc -->

  <input type="submit" id="adminStoreButton" class="btn btn-primary" value="Create"/>
  <input type="submit" id="adminUpdateButton" class="btn btn-primary" value="Update"/>
  </form>

JS:根据单选按钮选择显示管理员的详细信息并隐藏和显示商店/更新按钮

var admins = {!!  $administrators !!}

$("input[name='radiobutton']").click(function() {

if($(this).attr("id") == "create_administrator"){
$("#adminUpdateButton").hide();
$("#adminStoreButton").show();
form.attr('action', '{{route('admins.store', ['post_id' => $post->id])}}');
}
else{
$("#adminUpdateButton").show();
$("#adminStoreButton").hide();
form.attr('action', '{{route('admins.update', ['post_id' => $post->id])}}');
}

let id = $(this).attr("id");

let data = administrators.find(e => e.id == id) || {
name: "",
email: "",
...: ""
};
$("input[name='name']").val(data.name);
...
});

//更新管理员路线

Route::get('post/edit/{id}/admins',    [ 'uses' => 'AdminController@edit', 'as'=>'admins.edit']);
Route::post('post/update/{id}/admins', [ 'uses' => 'AdminController@update', 'as'=>'admins.update']);

管理员控制器更新方法:

    public function update(Request $request, $id){


        $this->validate($request, [
            'name' => 'required|string',
          ...
        ]);


        $adminToUpdate = Administrator::find($request->radiobutton);

        $adminToUpdate->name = $request->name;
        ...

        $adminToUpdate->save();

        return redirect()->back();
    }

}

管理员控制器编辑方法:

public function edit($id)
    {
        $post = Post::find($id);
        $administrators = Administrator::where('post_id', $id)->get();

        return view('administrators.edit')
            ->with('post', $post)
            ->with('administrators', $administrators));
    }

0 个答案:

没有答案