对Laravel来说还是一个新手,我必须创建一个用于创建的表单和一个用于编辑的表单.在我的形式中,我有一些jquery ajax帖子.我想知道Laravel是否确实提供了一种简单的方法让我使用相同的表单进行编辑和创建,而无需在我的代码中添加大量逻辑.每次在表单加载时为字段赋值时,我都不想检查是否处于编辑或创建模式.关于如何以最少的编码实现这一目标的任何想法?
我喜欢使用表单,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); }
您可以在控制器中轻松完成:
public function create()
{
$user = new User;
$action = URL::route('user.store');
return View::('viewname')->with(compact('user', 'action'));
}
public function edit($id)
{
$user = User::find($id);
$action = URL::route('user.update', ['id' => $id]);
return View::('viewname')->with(compact('user', 'action'));
}
你必须使用这种方式:
{{ Form::model($user, ['action' => $action]) }}
{{ Form::input('email') }}
{{ Form::input('first_name') }}
{{ Form::close() }}
另一个带有小控制器,两个视图和局部视图的干净方法:
UsersController.php
public function create() { return View::('create'); } public function edit($id) { $user = User::find($id); return View::('edit')->with(compact('user')); }
create.blade.php
{{ Form::open( array( 'route' => ['users.index'], 'role' => 'form' ) ) }} @include('_fields') {{ Form::close() }}
edit.blade.php
{{ Form::model( $user, ['route' => ['users.update', $user->id], 'method' => 'put', 'role' => 'form'] ) }} @include('_fields') {{ Form::close() }}
_fields.blade.php
{{ Form::text('fieldname1') }} {{ Form::text('fieldname2') }} {{ Form::button('Save', ['type' => 'submit']) }}
为了创建,在视图中添加一个空对象。
return view('admin.profiles.create', ['profile' => new Profile()]);
旧函数具有第二个参数,即默认值,如果您在此处传递对象的字段,则可以重用输入。
对于表单操作,可以使用正确的端点。