2011-04-11 81 views
5

我有一个BuildingUser关联。 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 User`记录中注明这些输入做。我无法找到的方法是删除从验证规则放在那里的div所需的类。

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

谢谢。

+4

+1为标题。出于某种原因,它让我微笑...... – thkala 2011-04-11 00:57:32

回答

0

我很惊讶那个欺骗的解决方案并不适合我(也许我只是做错了什么),但我最终不得不使用JavaScript来“手动”从每个字段的包含div中移除所需的类。

0

这应做到:

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

或者,你可以在unset控制器只是该视图的required规则,但要小心的结果:

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

有趣的是,我认为第一个也可以工作,但它绝对没有工作。我想也许我错过了一些东西,但我想我只会用这种方法来添加所需的类;永远不要删除它。 – 2011-04-11 08:51:16

+0

这看起来很疯狂,但即使取消设置'required'键也不行。我也明确地将其设置为“false”。一个'debug()'print告诉我它没有设置/ false,但类仍然出现在div上。 – 2011-04-11 09:09:04

1

我有同样的问题,这个工作对我来说(在蛋糕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

不错的解决方案。我喜欢使用CSS来为此目的重写演示文稿和内容。 – 2011-12-12 19:59:56

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> 
0
$("#idOfYourTag").attr("required","false"); 

这对我的作品

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

我想这是一个长的时间,科曼,但这里是‘正确’的方法,使不需要(至少在蛋糕输入元素2.4。1):

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

只需通过'required' => false

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