2011-04-26 56 views
0

我有一个embeddedForm,我正在尝试配置窗口小部件。symfony - embedForm和窗体小部件不保存

目前我只是输出的形式在_form.php模板,如:

<?php echo $form ?> 

这是伟大的,但我想有我表单字段以特定的顺序,所以我想我会尝试:

<?php echo $form['firstname']->renderRow() ?> 
<?php echo $form['lastname']->renderRow() ?> 
<?php echo $form['email_address']->renderRow() ?> 

这给了我一个无效的小部件错误。

现在我有2种形式,一种是基本形式,它简单地嵌入另一种形式。

<?php 
class labSupportForm extends sfGuardUserAdminForm 
{ 
    public function configure() 
    { 
    $form = new labSupportProfileForm($this->getObject()->getProfile()); 
    $this->embedForm('profile', $form); 

    unset($this['is_super_admin'], $this['is_admin'], $this['permissions_list'], $this['groups_list']); 

    $this->widgetSchema['profile'] = $form->getWidgetSchema(); 
    $this->validatorSchema['profile'] = $form->getValidatorSchema(); 
} 

public function save($con = null) 
{ 
    $user = parent::save($con); 
    if (!$user->hasGroup('Lab Support')) 
    { 
    $user->addGroupByName('Lab Support'); 
    $user->save(); 
    } 
    return $user; 
} 
} 

和:

<?php 
class labSupportProfileForm extends sfGuardUserProfileForm 
{ 
    public function configure() 
    { 
    unset($this['email_new'], 
      $this['validate_at'], 
      $this['validate'], 
      $this['address_1'], 
      $this['address_2'], 
      $this['city'], 
      $this['country'], 
      $this['postcode'], 
      $this['created_at'], 
      $this['updated_at'], 
      $this['user_id'], 
      $this['is_super_admin'], 
      $this['is_admin'], 
      $this['permissions_list'], 
      $this['groups_list']); 
    } 
} 

,但如果我的窗口小部件/验证添加到labSupportForm和保存时,firstname值不保存。

我在这里做错了什么,因为我会认为这个值会节省。

感谢

+0

你不必写$这个 - > widgetSchema [“个人资料”] = $形式 - > getWidgetSchema(),这是自动由embedForm方法处理,sa我为验证模式。 – Dziamid 2011-04-26 16:30:06

回答

0

当您呈现由字段的表格,你必须明确地调用$形式 - > renderHiddenFields()。例如:

<?php echo form_tag_for($form, '@url') ?> 
    <table> 
    <tfoot> 
     <tr> 
     <td colspan="2"> 
      <input type="submit" value="Save" /> 
      <?php echo $form->renderHiddenFields() ?> 
     </td> 
     </tr> 
    </tfoot> 
    <tbody> 
     <?php echo $form['username']->renderRow() ?> 
     <?php echo $form['profile_form']->renderRow() ?> 
    </tbody> 
    </table> 
</form> 

此外,提防调用嵌入表单名称相同的关系名称(如“曲线”)或保存时,你将有troubles。只需添加“_form”后缀,你会是安全的:如果你想让你的表单字段的线性显示结构

$this->embedForm('profile_form', $form); 

,你应该明确地根据自己的插件架构使其:

 <?php echo $form['username']->renderRow() ?> 
     <?php echo $form['profile_form']['first_name']->renderRow() ?> 
     <?php echo $form['profile_form']['last_name']->renderRow() ?> 

也可以为嵌入形式的所有字段自动做到这一点:

<?php foreach ($form['profile_form'] as $field): ?> 
     <?php if (!$field->isHidden()): ?> 
     <?php echo $field->renderRow() ?> 
     <?php endif; ?> 
    <?php endforeach; ?> 
+0

工作很好!我知道我做错了什么! – 2011-04-27 08:05:57

0

呼叫$this->saveEmbeddedForms()labSupportForm保存方法