CakePHP 1.26: ошибка в компоненте «Безопасность»? - PullRequest
2 голосов
/ 11 апреля 2010

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

<?php echo $form->create('Audition');?>
    <fieldset>
        <legend><?php __('Edit Audition');?></legend>
    <?php
        echo $form->input('ensemble');
        echo $form->input('position');
        echo $form->input('aud_date');
        // The following line works fine...
       echo $form->input('owner');  
       // ...but the following line blackholes when Security included
        // and the form is submitted:
        // echo $form->input('owner', array('disabled'=>'disabled');
    ?>
    </fieldset>
<?php echo $form->end('Submit');?>

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

(извините за комментарии здесь, но мне не хватило места для них в комментариях)

ОБНОВЛЕНИЕ : Спасибо, Джеш, вы на 100% правы в этом - «входное значение не будет отправлено, когда оно отключено». Я даже посмотрел его на официальной спецификации HTML , где говорится: «[Отключенный элемент] не может получать пользовательский ввод, и его значение не будет отправлено вместе с формой». Но Cake IS отправив значение с формой! Когда я отключаю использование Компонента безопасности, я могу посмотреть на данные POST, отправленные с формой, и, конечно же, поле «владелец» было отправлено! К сожалению, это именно то поведение, которое я хотел, но, похоже, оно не соответствует официальной спецификации HTML ... поэтому я думаю, что это ошибка стандартного помощника по формам. Я сообщу об этом команде CakePHP как об ошибке, но я хотел бы услышать от любого, кто может подтвердить или опровергнуть это.

Кроме того, Джеш, ваша идея использовать безопасный ключ и установить для него значение false прекрасно работает, но я действительно не хочу оставлять это поле незащищенным (на самом деле, я ОСОБЕННО не хочу оставлять это поле незащищенным) и мне кажется, что не должен был. На самом деле, сейчас я думаю, что это также может быть ошибкой в ​​компоненте безопасности; Я использую FormHelper для создания моих форм здесь - так не должен ли компонент Security справиться с этим ??

@ Майлз: ваше решение тоже отлично работает - спасибо! Но это все еще оставляет открытыми те же вопросы, которые я поднял выше.

Ответы [ 3 ]

1 голос
/ 13 апреля 2010

Добавьте это в beforeFilter ():

$ this-> Security-> disabledFields = array ('owner');

1 голос
/ 11 апреля 2010

Ну, входное значение не будет отправлено, когда оно отключено. Но так как вы выводите поле с помощью FormHelper от Cakephp, SecurityComponent ожидает, что входное значение должно быть указано в массиве Controller->data, в противном случае это приведет к чёрной дыре вашего запроса.

Попробуйте добавить ключ secure в массив параметров формы и установите для него false.

0 голосов
/ 08 июля 2010

Вы можете использовать readonly вместо disabled в форме. Это подходит для меня. Disabled намеренно имеет черную дыру.

...