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