2011-02-17 29 views
0

我有_form.php這個形式插件分配一個值,以形成插件

echo $form['catcher_id']->renderLabel(); //the label 
echo $form['catcher_id']->renderError(); //the validator 

symfony中創建的基類:

<?php 
/** 
* LpmService form base class. 
*/ 
abstract class BaseLpmServiceForm extends BaseFormPropel 
{ 
    public function setup() 
    { 
    $this->setWidgets(array(
     'id'     => new sfWidgetFormInputHidden(), 
     'name'     => new sfWidgetFormInputText(), 
     'wap_home'    => new sfWidgetFormInputText(), 
     'call_center_number' => new sfWidgetFormInputText(), 
    [color=#FF4000] 'catcher_id'   => new sfWidgetFormPropelChoice(array('model' => 'LpmCatcher', 'add_empty' => false)),[/color] 
     'price_description' => new sfWidgetFormInputText(), 
     'logo'     => new sfWidgetFormInputText(), 
     'invalid_msisdn_text' => new sfWidgetFormInputText(), 
     'terms_and_conditions' => new sfWidgetFormInputText(), 
     'service_code'   => new sfWidgetFormInputText(), 
    )); 

    $this->setValidators(array(
     'id'     => new sfValidatorChoice(array('choices' => array($this->getObject()->getId()), 'empty_value' => $this->getObject()->getId(), 'required' => false)), 
     'name'     => new sfValidatorString(array('max_length' => 64, 'required' => false)), 
     'wap_home'    => new sfValidatorString(array('max_length' => 256, 'required' => false)), 
     'call_center_number' => new sfValidatorString(array('max_length' => 13, 'required' => false)), 
     'catcher_id'   => new sfValidatorPropelChoice(array('model' => 'LpmCatcher', 'column' => 'id')), 
     'price_description' => new sfValidatorString(array('max_length' => 128, 'required' => false)), 
     'logo'     => new sfValidatorString(array('max_length' => 255, 'required' => false)), 
     'invalid_msisdn_text' => new sfValidatorString(array('max_length' => 255, 'required' => false)), 
     'terms_and_conditions' => new sfValidatorString(array('max_length' => 750, 'required' => false)), 
     'service_code'   => new sfValidatorString(array('max_length' => 3, 'required' => false)), 
    )); 
    $this->widgetSchema->setNameFormat('lpm_service[%s]'); 
    $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema); 
    parent::setup(); 
    } 
    public function getModelName() 
    { 
    return 'LpmService'; 
    } 
} 

和我重新創建的下拉列表中手動所以我可以結合了「的onchange」事件:

<select name="services" onchange="refreshPage(this.form.services)" id="droplist"> 
      <?php 
       $catcher_names = LpmCatcherPeer::getByAllNames(); 
       foreach($catcher_names as $row) 
       { 
        ?> 
        <option value="<?php echo $row->getName()."/".$row->getId(); ?>" <?php 
         if($row->getName() == $catcher_name) echo 'selected="selected"'?>><?php echo $row->getName();?></option> 
        <?php 
       } 
        ?> 
      </select> 

我怎麼能值賦給echo $form['catcher_id']因爲現在當我選擇從下拉列表中的值,然後點擊提交驗證器說catcher_id是必需的(因爲我手動創建下拉菜單),所以我怎麼能手動設置值?

我有:

$form['catcher_id']->getWidget()->setAttribute('value', '11'); 

但它不工作。

回答

1

我相信這應該在你的模板工作:

<?php $form->setDefault('catcher_id', 123) ?> 

...或者在你的行動:

$this->form->setDefault('catcher_id', 123); 
+0

不怕,我仍然得到驗證者說catcher_id是必需的 – 2011-02-17 09:58:32

1

而是重新編碼選擇的,我會用選擇的ID和綁定事件在Javascript:

function init() 
{ 
    var el_to_bind = document.getElementById('lpm_service_catcher_id'); 
    el_to_bind.onchange = my_onchange_handler; 
} 

function my_onchange_handler(el) 
{ 
    // do your stuff here 
} 

或者,使用jQuery,

$('#lpm_service_catcher_id').change(function() { 
    // do your stuff here 
}); 
1

您需要讓手動創建的選擇名稱與symfony生成的名稱匹配。

假設lpm_service是表單的getName()調用返回的值,並且您使用默認名稱格式,則選擇的名稱必須是lpm_service[catcher_id]

0

問題是,您正在爲驗證器所做的選擇指定不同的值。您正在使用:

<select> 
<option value='name/id' ...> 
</select> 

和驗證器只對ID

$this->setValidators(array(
... 
     'catcher_id' => new sfValidatorPropelChoice(
         array('model' => 'LpmCatcher', 'column' => 'id')), 
... 
    )); 

這就是爲什麼驗證失敗searchs,它不設置你的默認值。

所以,我真的會做的是使用默認的渲染,與

$this->form->setDefault('catcher_id', 123); 

湯姆設置的值表示,並附上onchangehandler像yitznewton說。

0

您不必手動執行此操作。你可以在小部件上設置你想要的任何屬性。你應該這樣做LpmServiceForm

$this->getWidget('catcher_id')->setAttribute('onchange', 'refreshPage(this.form.services)'); 

並且像往常一樣渲染窗體。

相關問題