Как не требовать обязательного ввода - PullRequest
5 голосов
/ 11 апреля 2011

У меня есть Building, который связан с User. A User также может регистрироваться, входить в систему и т. Д. У меня установлен набор проверки, поэтому поля User (например, email, name и т. Д.) Являются обязательными.

Когда я создаю здание, я также предлагаю возможность связать пользователя на месте. Моя форма здания имеет входные данные для этой ключевой информации пользователя:

<?php echo $this->Form->input( 'User.first_name' ) ?>
<?php echo $this->Form->input( 'User.last_name' ) ?>
<?php echo $this->Form->input( 'User.email' ) ?>

Тем не менее, я не хочу, чтобы эти входы были указаны как обязательные. B / c Я хочу, чтобы пользователь мог создавать Building without necessarily creating a запись пользователя. Я не могу найти способ сделать это - удалить требуемый класс из div, который помещается туда правилом валидации.

Я пробовал различные комбинации 'required' => false и установку значения class, но пока ничего не получалось. Есть ли хороший способ не требовать ввода формы?

Спасибо.

Ответы [ 7 ]

5 голосов
/ 25 октября 2013

Полагаю, это было давно, но вот «правильный» способ сделать элемент ввода необязательным (по крайней мере, в Cake 2.4.1):

echo $this->Form->input('studentid', array(
    'label' => __('Student ID'),
    'required' => false
));

Просто передать 'required' => false.

Мне бы очень хотелось сказать, что я знаю, как автоматически запускать это поведение, но изменение моих моделей, похоже, не влияет на автоматически сгенерированные элементы <input>. Я буду обновлять этот пост, если / когда я это выясню.

1 голос
/ 12 декабря 2011

У меня была та же проблема, и это сработало для меня (протестировано в Cake 1.2, но я уверен, что оно будет переведено на 1.3)

  1. Добавьте класс "norequire" на ваш лейбл:

    echo $this->Form->input( 'User.first_name', array('label'=>array('class'=>'norequire','text'=>'First Name') ));
    
  2. В вашем CSS установите класс norequire:

    form .required label.norequire { font-weight:normal;  }
    form .required label.norequire:after { content:'';  }
    

(Часть "form .required" былаважно для переопределения css по умолчанию для тортов для требуемого класса.)

0 голосов
/ 06 июня 2013

Я до сих пор не нашел «правильного» ответа на это, но для быстрого взлома вы можете просто попытаться не использовать помощник по формам и бросить код в себя

<?php
//echo $this->Form->input( 'User.first_name' )
//echo $this->Form->input( 'User.last_name' )
//echo $this->Form->input( 'User.email' )
echo "<div class='input text'><label for='User_first_name'>First Name</label>
      <input name='data[User][first_name]' maxlength='50' type='text' id='User_first_name'/></div>";
echo "<div class='input text'><label for='User_last_name'>Last Name</label>
      <input name='data[User][last_name]' maxlength='50' type='text' id='User_last_name'/></div>";
echo "<div class='input text'><label for='User_email'>Username</label>
      <input name='data[User][email]' maxlength='50' type='text' id='User_email'/></div>";
?>
0 голосов
/ 17 января 2013
$("#idOfYourTag").attr("required","false");

Это работает для меня

0 голосов
/ 28 августа 2012

В итоге я вручную добавил разделение. Не очень изящно, но работает:

<?php if ($this->Form->isFieldError('first_name')) { ?>
    <div class="input text error">
<?php } else { ?>
    <div class="input text">
<?php }
    echo $this->Form->input('first_name', array('div' => false)); ?>
</div>
0 голосов
/ 07 мая 2011

Я удивлен, что решение deceze не сработало для меня (возможно, я просто сделал что-то не так), но мне пришлось использовать Javascript, чтобы «вручную» удалить необходимый класс из каждого поля, содержащего div.

0 голосов
/ 11 апреля 2011

Это должно сделать это:

echo $this->Form->input('User.first_name',
                        array('div' => array('class' => 'input text')));

Кроме того, вы можете unset правило required в контроллере только для этого представления, но будьте осторожны с результатами:

unset($this->User->validate['first_name']['ruleName']['required']);
...