В CakePHP 3 у испеченных контроллеров есть 4 функции, которые имеют свои собственные представления: Индекс, Добавить, Редактировать и Удалить. Я пытаюсь переместить функции Edit и View в модалы, но мне нужна переменная PHP, чтобы определить конкретную запись данных, которая должна быть изменена или просмотрена.
Например. У меня есть таблица под названием «Пользователи».
В функции Index для UserController я бы определил следующую переменную:
$users = $this->paginate($this->Users); $this->set(compact('users')); $this->set('_serialize', ['users']);
Затем в представлении Index (Index.ctp) внутри таблицы я бы выполнил следующие действия:
<?php foreach ($users as $user): ?> <tr> <td class="actions"> <?= $this->Html->link(__('View'), ['action' => 'view', $user->id]) ?> <?= $this->Html->link(__('Edit'), ['action' => 'edit', $user->id]) ?> </td> </tr> <?php endforeach; ?>
Я хочу, чтобы вышеуказанные действия передавали $ user-> id в тег HTML, который мог бы открыть модальный код следующим образом:
Просмотр Редактировать
И используйте JavaScript, чтобы открыть модель.
$(function () { $('#view').click(function () { $('#viewModal').modal('show'); }); }); $(function () { $('#edit').click(function () { $('#editModal').modal('show'); }); });
В качестве альтернативы просто передайте его прямо к модальному, а затем выберите данные для каждого из полей формы на основе этого.
Затем для Edit modal, при сохранении, я бы использовал AJAX PUT для сохранения.
Редактировать Modal:
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> <h4 class="modal-title" id="myModalLabel">Edit</h4> <div> <div class="col-sm-6"> <?= $this->Form->input('firstname', ['class' => 'form-control', 'label' => 'First Name', 'id' => 'firstname']); ?> </div> <div class="col-sm-6"> <?= $this->Form->input('lastname', ['class' => 'form-control', 'label' => 'Last Name', 'id' => 'lastname']); ?> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close </button> <button id="savebutton" type="button" class="btn btn-primary" data-dismiss="modal">Save changes </button> </div> </div> </div> </div>
введите идентификатор к вашей ссылке следующим образом:
<?php foreach ($users as $user): ?> <tr> <td class="actions"> <?= $this->Html->link(__('View'), ['action' => 'view', $user->id]), ['id' => 'view', 'data-id' => $user->id]) ?> <?= $this->Html->link(__('Edit'), ['action' => 'view', $user->id]), ['id' => 'edit', 'data-id' => $user->id]) ?> </td> </tr> <?php endforeach; ?>
то в ваших моделях определите идентификатор пользователя следующим образом:
неясно, как вы реализуете свои модальности, поэтому я буду предполагать следующее
$(function () { $('#view').click(function (ev) { ev.preventDefault(); var userId = $(this).attr('data-id'); $('#viewModal').modal('show'); }); }); $(function () { $('#edit').click(function (ee) { ee.preventDefault(); var userId = $(this).attr('data-id'); $('#editModal').modal('show'); }); });
вам нужно будет передать идентификатор пользователя вашему модальному использованию