Создать форму с сохранением нескольких записей - PullRequest
0 голосов
/ 02 ноября 2011

Использование методов форм CakePHP (Cake 1.3.13) Я пытаюсь создать форму, которая редактирует и сохраняет большое количество записей; на самом деле это просто большая таблица, и пользователь сохраняет одно поле для каждой записи. Функции формы Cake по умолчанию производят элементы формы, которые отправляют только одну запись; когда я отправляю форму, сохраняются только данные последней записи, поскольку все элементы формы имеют одинаковое имя, они сохраняют только два поля в `$ this-> data '.

Это мои элементы формы:

$this->Form->hidden('TicketNo', array('value'=>$ticket['Hauler']['TicketNo']))
$this->Form->checkbox('Paid',array('value'=>$ticket['Hauler']['Paid']))

В результате получается следующий HTML-код, который будет сохраняться только для одной записи:

<input type="hidden" name="data[Hauler][TicketNo]" value="35498155" hiddenfield="1" id="HaulerTicketNo">

Формат, в котором они должны быть:

<input type="hidden" name="data[Hauler][id][TicketNo]" value="35498155" hiddenfield="1" id="HaulerTicketNo">

Где id - это первичный ключ записи. Таким образом, идентификатор для соответствующей записи передается в массив $this->data, и я могу сохранить все соответствующие записи, если я правильно понимаю. Я могу вручную создать такую ​​форму с помощью HTML и PHP, но для методов формы cakePHP должен быть способ сделать это, верно?

1 Ответ

2 голосов
/ 02 ноября 2011

Просмотрите ваши записи и используйте этот синтаксис:

Я бы не использовал идентификатор в качестве ключа массива, а вместо этого перебрал бы записи:

$this->Form->hidden('Hauler.' . $i . '.TicketNo', array('value'=>$ticket['Hauler']['TicketNo']));

Отправляющими постданными будет массив, подобный $ data ['Hauler'] [0] ['TicketNo']);

Поместите идентификатор в скрытое поле для каждой записи, и я думаю, что saveAll () должен проглотить его. Если это не цикл, вы можете просто сохранить () каждую запись, потому что идентификатор уже существует, и вам не нужно менять структуру массива для сохранения или устанавливать идентификатор.

Кстати, вы не следуете рамочным соглашениям. 'TicketNo' должно быть 'ticket_no'; Я настоятельно рекомендую всем следовать конвенциям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...