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

我真的希望我能說我知道如何自動觸發此行爲,但修改我的模型似乎並不影響自動生成的元素。如果/當我弄明白的話,我會更新這篇文章。