Cakephp 3.6.14: Контроллер получает пост-запрос, повторно открывает представление и копирует элементы формы - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу, чтобы, когда пользователь отправил форму, ее содержимое будет сохранено в базе данных, но затем оно будет перенаправлено на ту же форму с полями, аналогичными предыдущему, чтобы пользователь мог отредактировать некоторые из них и сохранитьэто снова.Как мне этого добиться?

КОД

add.ctp:

<div class="roles form large-9 medium-8 columns content">
<?= $this->Form->create($role) ?>
<fieldset>
    <legend><?= __('Add Role') ?></legend>
    <?php
        echo $this->Form->control('name');
        echo $this->Form->control('description');
    ?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>

RolesController.php (добавить функцию)

public function add()
{
    $role = $this->Roles->newEntity();
    if ($this->request->is('post')) {
        $role = $this->Roles->patchEntity($role, $this->request->getData());
        if ($this->Roles->save($role)) {
            $this->Flash->success(__('The role has been saved.'));

            return $this->redirect(['action' => 'index']);
        }
        $this->Flash->error(__('The role could not be saved. Please, try again.'));
    }
    $this->set(compact('role'));
}

1 Ответ

0 голосов
/ 04 февраля 2019

Для того, чтобы остаться на той же странице / форме, просто удалите return $this->redirect(['action' => 'index']) - но я не думаю, что это то, что вы действительно хотите.Пользователь будет в тупике на странице «Добавить» - просто добавляя больше сущностей ...

Ознакомьтесь с учебником по CakePHP Controller - он показывает, как создать метод edit ишаблон.После этого вы должны изменить перенаправление на что-то вроде return $this->redirect(['action' => 'edit', $role->get('name')]) (при условии, что свойство name подходит для идентификации объектов роли).

...