Разбор формы CakePHP / jQuery - PullRequest
       2

Разбор формы CakePHP / jQuery

0 голосов
/ 19 февраля 2012

У меня есть форма, которой можно манипулировать в браузере клиента с помощью javascript (то есть строки могут быть добавлены, удалены и т. Д.). Я хотел бы как-то отправить данные этой формы обратно на сервер, но я не уверен, какой будет наилучший подход.

Один из подходов, о котором я подумал, состоит в том, чтобы динамически генерировать идентификаторы для каждой строки, добавляемой в форму, но я вижу, что это становится очень грязным, когда я пытаюсь проанализировать данные POST обратно в моем контроллере CakePHP.

Другим подходом, который пришел в голову, было бы проанализировать клиентскую форму, сгенерировать структуру JSON или XML, которую легче перебрать, и отправить ее обратно в контроллер. Хотя я не уверен, как реализовать что-то подобное.

Как вы думаете, лучшее решение для этого?

<?php echo $this->Html->script('jquery-1.7', FALSE); ?>
<h2>Assign Responses</h2>
<a id='addResponseLink' href='#'>Add a Response Action</a>
<?php 
$this->Js->get('#addResponseLink');
$this->Js->event('click', "$('#responseActionsTable').append('<tr style=\'display:none\' id=\'row\'>".
    "<td>".$this->Form->input('trigger_word')."</td>".
    "<td>PROCEED"."</td>".
    "<td>5"."</td>".
    "<td><a id=\'removeLink\' href=\'#\'>Remove</a></td>".
    "</tr>');".
    "$('tr').last().fadeIn();".
    "$('#removeLink').live('click', function() { $(this).closest('tr').fadeOut().delay(1500).queue(function() $(this).remove()); })");
?>
<?php
echo $this->Form->create(array('action' => 'assignResponsesSave'));
?>

<table id='responseActionsTable'>
    <tr>
        <th>Trigger Word</th>
        <th>Action</th>
        <th>Next Question</th>
        <th>Remove</th>
    </tr>

    <?php foreach($responseActions as $responseAction): ?>
        <tr>
            <td><?php echo $this->Form->input('trigger_word', array('default' => $responseAction['responses_actions']['trigger_word'])); ?></td>
            <td><?php echo($responseAction['responses_actions']['action']); ?></td> <!-- This and the next sibling will be inputs -->
            <td><?php echo($responseAction['responses_actions']['next_question']); ?></td>
            <td>Remove</td>
        </tr>
    <?php endforeach; ?>
</table>
<?php echo $this->Form->submit('Save Changes'); ?>
<?php echo $this->Form->end(); ?>

<?php echo $this->Js->writeBuffer(); ?>

1 Ответ

1 голос
/ 20 февраля 2012

Если у ваших входов есть имена типа data[Model][0][field], data[Model][1][field] (что соответствует $this->Form->input('Model.0.field') и т. Д.), То в контроллере вы можете передать данные POST для saveMany (Cake 2.x) или saveAll (Cake 1.x), и он сохранит несколько записей.

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

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