Duplicate Controller
Adds a Controller Behavior to duplicate Models in Backend
Duplicate Controller
Adds a Controller Behavior to duplicate Models in Backend
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.
Installation via Command Line
php artisan plugin:install PcWeb.DuplicateController
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
I often use it with ease since it does the expected job !
-
Maria Vilaró
Not working, missing documentation. I finally made it work but relations are not correctly populated.
-
Pc-Web Entwicklung author
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
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 |
|---|