embedForm
使用doctrine和SF1.4
我创建了一个模块,用户可以使用sfDoctrineGuard编辑/创建/删除特定组中的用户
表单只是一个名为manufacturerForm.class.php
的自定义表单,它扩展了sfGuardUserAdminForm
class manaufacturerForm extends sfGuardUserAdminForm
{
public function configure()
{
$form = new sfGuardUserProfileForm();
$this->embedForm('profile', $form);
unset($this['firstname'], //this field is in sfGuardUserProfile is shown in form
$this['user_id'], //this field is in sfGuardUserProfile is shown in form
$this['is_super_admin'], //this field is in sfGuardUser is not shown
$this['is_admin'], // this filed is in sfGuardUser is not shown
$this['permissions_list'], //this field is in sfGuardUser is not shown
$this['groups_list']);//this field is in sfGuardUser is not shown
}
}
您可以看到我在sfGuardUserProfileForm
内嵌入了manufacturerForm
。
我有2个问题,sfGuardUserProfile
包含我不想为此特定表单显示的字段,例如:
firstname, lastname, email_new, created_at, updated_at
,但我似乎无法取消它们,因为它们仍会显示。
请注意,此管理模块没有generator.yml
文件。我正在editSuccess.php
中使用_form.php
部分来完成所有这些操作。
我的另一个问题是,当我编辑现有用户并保存一切都很好。当我尝试编辑时出现问题,因为我得到以下内容:
An object with the same "user_id" already exist.
- 这是针对sfGuardUserProfile中的user_id
字段,email_new
字段也是如此。我得到An object with the same "email_new" already exist.
1)如何取消设置我不需要的字段?
2)我是否需要覆盖任何doSave(),updateObject(),saveEmbeddedForms()方法来停止上一个问题?
由于
答案 0 :(得分:1)
要从嵌入表单中删除字段,您需要在sfGuardUserProfileForm
表单中执行此操作。这是因为字段只有在嵌入manufacturerForm
时才会被读取。
如果您需要从通常不会执行的sfGuardUserProfileForm
中删除自定义字段,只需扩展该类,删除其中的字段并嵌入新的扩展表单。
当您嵌入表单时,需要传入现有的sfGuardUserPofile对象。
class manaufacturerForm extends sfGuardUserAdminForm
{
public function configure()
{
$form = new manaufacturerProfileForm($this->getObject()->getProfile());
$this->embedForm('profile', $form);
}
}
class manaufacturerProfileForm extends sfGuardUserProfileForm
{
public function configure()
{
unset($this['firstname'], //this field is in sfGuardUserProfile is shown in form
$this['user_id'], //this field is in sfGuardUserProfile is shown in form
$this['is_super_admin'], //this field is in sfGuardUser is not shown
$this['is_admin'], // this filed is in sfGuardUser is not shown
$this['permissions_list'], //this field is in sfGuardUser is not shown
$this['groups_list']);//this field is in sfGuardUser is not shown
}