I'm implementing a "Clone" button in my application, which should allow to perform the following:
- create a copy of the chosen model;
- redirect to the
create
view, whose form field should be populated with the cloned model's data; - allow the user edit some fields;
- save the new model.
So far, my ModelController@clone
method is:
$newModel = $existingModel->replicate();
$newModel->title = "Copy of ".$existingModel->title;
$newModel->created_at = now() // not sure if necessary, or if it'll be changed once the model is stored in the database
return redirect(route('models.create')); // I know this doesn't do what I need
As it is, obviously, nothing gets passed to the create
view, but I can't find any clue on how to do that.
I have tried adding ->withInput(compact($newModel))
to the redirect()
call, but I don't see the field being populated.
In the models.create
view, I have set up the form field to use the old(...)
data, if available.
This answer is almost what I need, but it would imply changing every field to check if there is some sort of input other than the old
session data, like this:
<input [other attributes omitted] value="{{ $newModel['title'] ?? old('title') }}">
Is it the right way to do so, or is there a quicker/more standardized way of proceeding?
CodePudding user response:
you could overriding the session old input data by:
Session::put('_old_input', $newModel);
and then just render the old()
in form inputs