当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Laravel使用相同的表单进行创建和编辑》经验,为你挑选了4个好方法。

对Laravel来说还是一个新手,我必须创建一个用于创建的表单和一个用于编辑的表单.在我的形式中,我有一些jquery ajax帖子.我想知道Laravel是否确实提供了一种简单的方法让我使用相同的表单进行编辑和创建,而无需在我的代码中添加大量逻辑.每次在表单加载时为字段赋值时,我都不想检查是否处于编辑或创建模式.关于如何以最少的编码实现这一目标的任何想法?



1> The Alpha..:

我喜欢使用表单,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);
}


它不再是Laravel核心的一部分.
很有帮助.我必须阅读有关表单模型绑定的更多信息
这是一个很好的方式来做更多,而写作较少,我的大多数管理控制器使用这种方法与`resource/Restful`控制器:-)
@李,我知道。检查此答案的日期。很久以前就已经回答了,因此有效...

2> Antonio Carl..:

您可以在控制器中轻松完成:

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() }}


你如何处理使用POST或PATCH方法取决于创建或更新?

3> Samuel De Ba..:

另一个带有小控制器,两个视图和局部视图的干净方法:

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']) }}


我认为这实际上是最干净/最好的答案.

4> pasquale..:

为了创建,在视图中添加一个空对象。

return view('admin.profiles.create', ['profile' => new Profile()]);

旧函数具有第二个参数,即默认值,如果您在此处传递对象的字段,则可以重用输入。


对于表单操作,可以使用正确的端点。

对于更新,您必须使用PATCH方法。

@isset($profile->id)
 {{ method_field('PATCH')}}
@endisset

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有