Adds a Controller Behavior like Backend\Behaviors\FormController
for duplicating Models.
Provides an easy way of duplicating Entities.
You only have to add a Form behavior, a Link to the Duplicate action and a view.
Usage
Duplicate View
In your Controller class add PcWeb\DuplicateController\Behaviors\DuplicateController
to the list of implemented behaviors.
public $implement = [ 'Backend\Behaviors\ListController', 'Backend\Behaviors\FormController', 'Backend\Behaviors\RelationController', 'PcWeb\DuplicateController\Behaviors\DuplicateController' ];
in your update view or list view add an link to the duplicate/[model-id]
action.
UpdateView:
<a href="<?= Backend::url('pcweb/myplugin/mycontroller/duplicate/', $formModel->id) ?>">Duplicate</a>
ListView:
<a href="<?= Backend::url('pcweb/myplugin/mycontroller/duplicate/', $recordId) ?>">Duplicate</a>
Create a file similar to the create.htm inside the controller views folder.
The file could look like follows:
<?php Block::put('breadcrumb') ?> <ul> <li> <a href="<?= Backend::url('pcweb/myplugin/mycontroller') ?>">MyController</a> </li> <li><?= e($this->pageTitle) ?></li> </ul> <?php Block::endPut() ?> <?php if (!$this->fatalError): ?> <?php Block::put('form-contents') ?> <div class="layout-row min-size"> <?= $this->formRenderOutsideFields() ?> </div> <div class="layout-row"> <?= $this->formRenderPrimaryTabs() ?> </div> <div class="form-buttons"> <div class="loading-indicator-container"> <button type="submit" data-request="onSave" data-request-data="redirect:1" data-hotkey="ctrl+s, cmd+s" data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>" class="btn btn-primary"> <?= e(trans('backend::lang.form.save')) ?> </button> <button type="button" data-request="onSave" data-request-data="close:1" data-hotkey="ctrl+enter, cmd+enter" data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>" class="btn btn-default"> <?= e(trans('backend::lang.form.save_and_close')) ?> </button> <button type="button" class="oc-icon-trash-o btn-icon danger pull-right" data-request="onDelete" data-load-indicator="<?= e(trans('backend::lang.form.deleting')) ?>" data-request-confirm="<?= e(trans('backend::lang.form.confirm_delete')) ?>"> </button> <span class="btn-text"> <?= e(trans('backend::lang.form.or')) ?> <a href="<?= Backend::url('pcweb/myplugin/mycontroller') ?>"><?= e(trans('backend::lang.form.cancel')) ?></a> </span> </div> </div> <?php Block::endPut() ?> <?php Block::put('form-sidebar') ?> <div class="hide-tabs"><?= $this->formRenderSecondaryTabs() ?></div> <?php Block::endPut() ?> <?php Block::put('body') ?> <?= Form::open(['class' => 'layout stretch']) ?> <?= $this->makeLayout('form-with-sidebar') ?> <?= Form::close() ?> <?php Block::endPut() ?> <?php else: ?> <p class="flash-message static error"><?= e(trans($this->fatalError)) ?></p> <p><a href="<?= Backend::url('pcweb/myplugin/mycontroller') ?>" class="btn btn-default"><?= e(trans('backend::lang.form.return_to_list')) ?></a></p> <?php endif ?>
You have to update all lines containing Backend::url(...
A new Model opens with all attributes duplicated.
You can customize attributes to duplicate with the $duplicates
property in the model.
You can also include relations in this array. Relation duplicates are handled with Defered Bindings
For example:
public $duplicates = ['relBelongsToMany', 'relBelongsTo', 'relHasOne', 'relHasMany', 'name'];
Extend Duplicate Logic
you can define the method formExtendDuplicate
in your controller to handle additional actions after duplication.
public function formExtendDuplicate($model, $existing) { // ... }
Known issues:
Many2Many relations don't get duplicated, they are linked instead. If you would like to clone the rows inside the relation table, you have to use the formExtendDuplicate
in the controller.
-
Taï-nui
Found the plugin useful on 20 Nov, 2020
I often use it with ease since it does the expected job !
-
Maria Vilaró
Found the plugin not useful on 15 Apr, 2019
Not working, missing documentation. I finally made it work but relations are not correctly populated.
-
Pc-Web Entwicklung author
Replied on 24 Apr, 2019
Can you please provide further information on what relations you want to duplicate. The best place to discuss is on the Product support Page.
-
Alexandre
Found the plugin not useful on 13 Apr, 2019
Doesn't work actually (see issue : https://octobercms.com/plugin/support/pcweb-duplicatecontroller/duplicate-form-is-empty)
Marked as not useful cause problem reported 3 weeks ago without any kind of support. Will update my review if the maintainer bring a solution
-
1.0.1 |
Initialize plugin. Jan 24, 2019 |
---|