regarding using the same form for both, this is my preferred approach now, but before that I used a partial for the form fields and the main view just contained the method specific form open tag
now I initialise a new model and then call the edit function.
Suppose this was crud for Task object;
public function create(Request $request)
$task = new Task();
return $this->edit($task, $request);
public function edit(Task $task, Request $request)
$categories = Category::all();
I don't find this ugly as I have dried up my code quite a bit.
in the view, I use
@if($task->exists) in order to decide which form open tag to use and if sending to the store or update methods.
The rest of the form is written identically for either create or update.