Laravel 使用相同的表单进行创建和编辑

新手上路,请多包涵

我对 Laravel 很陌生,我必须创建一个用于创建的表单和一个用于编辑的表单。在我的表单中,我有很多 jquery ajax 帖子。我想知道 Laravel 是否确实为我提供了一种简单的方法来使用相同的表单进行编辑和创建,而无需在我的代码中添加大量逻辑。我不想每次在表单加载时为字段分配值时检查是否处于编辑或创建模式。关于如何以最少的编码完成此任务的任何想法?

原文由 Kevin Joymungol 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 500
2 个回答

我喜欢使用 model binding 这样我可以轻松地用相应的值填充表单的字段,所以我遵循这种方法(例如使用 user 模型):

 @if(isset($user))
    {{ Form::model($user, ['route' => ['updateroute', $user->id], 'method' => 'patch']) }}
@else
    {{ Form::open(['route' => 'createroute']) }}
@endif

    {{ Form::text('fieldname1', Input::old('fieldname1')) }}
    {{ Form::text('fieldname2', Input::old('fieldname2')) }}
    {{-- More fields... --}}
    {{ Form::submit('Save', ['name' => 'submit']) }}
{{ Form::close() }}

所以,例如,从一个控制器,我基本上使用相同的形式来创建和更新,比如:

 // To create a new user
public function create()
{
    // Load user/createOrUpdate.blade.php view
    return View::make('user.createOrUpdate');
}

// To update an existing user (load to edit)
public function edit($id)
{
    $user = User::find($id);
    // Load user/createOrUpdate.blade.php view
    return View::make('user.createOrUpdate')->with('user', $user);
}

原文由 The Alpha 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是使用相同表单创建或编辑记录的简单方法。我已经为创建和编辑创建了 form.blade.php 文件

 @extends('layouts.admin')
    @section('content')
       <div class="card shadow mb-4">
           <div class="card-header py-3 d-flex justify-content-between">
               <h6 class="m-0 font-weight-bold text-primary">Create User</h6>
           </div>
           <div class="card-body">
            <form method="post" action="{{isset($user)? route('users.update',$user->id):route('users.store')}}">
                @csrf
                @if (isset($user))
                    @method('PUT')
                @endif
                <div class="row mb-3">
                    <div class="col-md-4">
                        <label>Name</label>
                        <input class="form-control @error('name') is-invalid @enderror" value="{{isset($user->name) ? $user->name: old('name')}}" type="text" name="name" required>
                        @error('name')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                        @enderror
                    </div>
                    <div class="col-md-4">
                        <label>Email address</label>
                        <input class="form-control @error('email') is-invalid @enderror" value="{{isset($user->email) ? $user->email:old('email')}}"  type="email" name="email" required>
                        @error('email')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                        @enderror
                    </div>
                    <div class="col-md-4">
                        <label>Password</label>
                        <input class="form-control @error('password') is-invalid @enderror"  value="{{old('password')}}" type="text" name="password" required>
                        @error('password')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                        @enderror
                    </div>

                </div>
                <div class="col-md-3">
                    <button class="btn btn-sm btn-success btn-icon-split">
                        <span class="text">Save</span>
                    </button>
                    <a href="{{route('users.index')}}" class="btn btn-sm btn-dark btn-icon-split">
                        <span class="text">Cancel</span>
                    </a>
                </div>
            </form>
           </div>
       </div>
    @endsection

在我的控制器中

public function create()
    {
        return view('admin.user.form');
    }

public function edit($id){
    $user= User::find($id);
    return view('admin.user.form', compact('user'));
}

原文由 Hafiz Azeem 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题