如何不要求所需的输入

时间:2011-04-11 00:42:23

标签: cakephp-1.3

我有BuildingUser相关联。 User也可以注册,登录等。我有我的验证集,因此需要关键的User字段(例如emailname等)。

当我创建一个建筑物时,我还提供了在现场关联用户的能力。我的构建表单包含该关键用户信息的输入:

<?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 User`记录。我无法找到的方法是从验证规则放在那里的div中删除所需的类。

我尝试了'required' => false的各种组合并设置class值,但到目前为止还没有任何效果。有没有一种不需要表单输入的好方法?

感谢。

7 个答案:

答案 0 :(得分:5)

我想这已经很长时间了,但是这里是“正确”的方法,不需要输入元素(至少在Cake 2.4.1中):

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

只需通过'required' => false

我真的希望我能说我知道如何自动触发此行为,但修改我的模型似乎不会影响自动生成的<input>元素。如果/我想出来的话,我会更新这篇文章。

答案 1 :(得分:1)

我遇到了同样的问题,这对我有用(在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:'';  }
    
  3. (“form .required”部分对于覆盖所需类别的cake的默认css非常重要。)

答案 2 :(得分:0)

这应该这样做:

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

或者,您可以在控制器中为unset required规则添加unset($this->User->validate['first_name']['ruleName']['required']); 规则,但请注意结果:

{{1}}

答案 3 :(得分:0)

我很惊讶deceze的解决方案对我不起作用(也许我只是做错了),但我最终不得不使用Javascript“手动”从包含div的每个字段中删除所需的类。

答案 4 :(得分:0)

我最后通过手动添加分区。不是很优雅,但它有效:

<?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>

答案 5 :(得分:0)

$("#idOfYourTag").attr("required","false");

这对我有用

答案 6 :(得分:0)

我仍然没有找到一个'正确'的答案,但作为一个快速的黑客你可以尝试不使用表单助手并自己抛出代码

<?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>";
?>