Laravel use same form for create and edit Laravel use same form for create and edit laravel laravel

Laravel use same form for create and edit


I like to use form model binding so I can easily populate a form's fields with corresponding value, so I follow this approach (using a user model for example):

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

So, for example, from a controller, I basically use the same form for creating and updating, like:

// To create a new userpublic 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);}


Pretty easy in your controller you do:

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

And you just have to use this way:

{{ Form::model($user, ['action' => $action]) }}   {{ Form::input('email') }}   {{ Form::input('first_name') }}{{ Form::close() }}


For the creation add an empty object to the view.

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

Old function has a second parameter, default value, if you pass there the object's field, the input can be reused.

<input class="input" type="text" name="name" value="{{old('name', $profile->name)}}">

For the form action, you can use the correct endpoint.

<form action="{{ $profile->id == null ? '/admin/profiles' :  '/admin/profiles/' . $profile->id }} " method="POST">

And for the update you have to use PATCH method.

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