CakePHP и более чем один флажок - PullRequest
0 голосов
/ 12 января 2012

Я не делаю ничего необычного с habtm.

То, что я пытаюсь сделать, это иметь несколько флажков в cakephp, и, ну, в общем, использовать их.

Так что у меня есть этокод на мой взгляд:

<div class="deleteButton">
    <?php echo $form->input('', array('type'=>'checkbox',
    'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false,
    'id'=>false, 'multiple'=>true)); ?>
</div>

, и это дает мне этот HTML-код на отображаемой странице:

<input type="checkbox" value="30" name="data[Videos]">
<input type="checkbox" value="31" name="data[Videos]">
<input type="checkbox" value="32" name="data[Videos]">

Теперь, когда я выбираю это в HTML и отправить, я получаю только ОДИНзначение в контроллере: ... pr ($ this-> data);...

Похоже, что cakephp перезаписывает сохраненные значения, потому что ЕДИНОЕ значение, которое я получаю, всегда является последним установленным значением флажка.

Что я делаю не так?

ОБНОВЛЕНИЕ: О, боже, я ненавижу cakephp

Используя это: http://nuts -and-bolts-of-cakephp.com/ 2008/05/05 / множественные флажки /

Вернее, это :: input ($ video ['Video'] ['id'], array ('type' => 'checkbox',' value '=> $ video [' Video '] [' id '],' label '=> false,' hiddenField '=> false,' multiple '=> true));?>

(я сделал $ video ['Video'] ['id'] первой записью, которая, по-видимому, предназначена для идентификаторов)

Мой запрос теперь полностью скрыт чертами CakePHP.нелепая черная дыра в компоненте безопасности.Честно, ПОЧЕМУ страница 404 не имеет просто переключаемой ошибки?Теперь мне нужно разобраться, как из этого извлечь значимую ошибку ...

любые идеи приветствуются!

ОБНОВЛЕНИЕ: РЕШЕНО: Да, вместо этого мне нужно:

<?php echo $form->input("Video".$video['Video']['id']."id", array('type'=>'checkbox', 'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false, 'multiple'=>true)); ?> 

То есть я обернул $ video ['Video'] ['id'] словами "Video" и "id".

NFI, почему это работает, у кого-нибудь есть идеи, я отмечуты как прав!

Ответы [ 2 ]

4 голосов
/ 12 января 2012

Похоже, что cakephp перезаписывает сохраненные значения, потому что ЕДИНОЕ значение, которое я получаю, всегда является последним установленным значением флажка.

это не было ошибкой торта ... если у вас есть два или более входов с одинаковым именем (в вашем случае 'data [Videos]'), php будет использовать только последнее значение для создания переменной $ _POST .. it как в запросе GET, если вы делаете что-то вроде:

mysite.com/intex.php?attr=1&attr=2&attr=3

Вы решили это, добавив идентификатор видео в имя поля. Так что теперь сгенерированный HTML-код выглядит так:

<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">

так что, как вы можете видеть, теперь все входные имена различны и ничего не перезаписывается.

Однако вместо того, чтобы давать имена самостоятельно, вы можете использовать опцию ' множественный ' и опцию ' options ', чтобы создать все флажки, используя только один оператор. Что-то вроде:

echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
                                                       'Value 2'=>'Label 2',
                                                       'Value 3'=>'Label 3'
                                                       ),
                                      'multiple' => 'checkbox'
        ));

Это все в доке;)

Надеюсь, это поможет

0 голосов
/ 12 января 2012

в первом параметре $ form-> input () используется поле model.field. В первом случае вы не указали это поле, поэтому все они были указаны в $ this-> data ['Videos'] вместо $ this-> data ['Videos'] ['cb1'], $ this-> data ['Videos '] [' '], $ this-> данные [' CB2 Видео '] [' CB3' ].

даже вы создаете форму с моделью:

$form->create('modelName'));

также полезно указывать поле:

$form->input('modelName.fieldname', array());

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