我有一个embeddedForm,我正在尝试配置小部件。
目前我只是在_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 :(得分:0)
在$this->saveEmbeddedForms()
保存方法
labSupportForm
答案 1 :(得分:0)
按字段呈现表单时,必须显式调用$ form-&gt; 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; ?>