Symfony1 symfony-将用户添加到表单中的组(sfGuardUserGroup)

Symfony1 symfony-将用户添加到表单中的组(sfGuardUserGroup),symfony1,symfony-1.4,symfony-forms,Symfony1,Symfony 1.4,Symfony Forms,我正在尝试将一些用户保存在自定义管理表单中,并希望将它们设置在特定的组中,即sfGuardUserGroup中 因此,如果我刚刚创建的用户id为25,那么我希望在sfGuardUserGroup表中有一个条目,其中user\u id为25,group\u id为8(8是我要将这些用户添加到的组id) 我可以在form类中或在processForm操作中执行此操作吗 我用的是条令和SF1.4 谢谢如果您需要为所有创建的sfGuardUser创建此行为,则应将此逻辑放入sfGuardUser类的模型

我正在尝试将一些用户保存在自定义管理表单中,并希望将它们设置在特定的组中,即
sfGuardUserGroup

因此,如果我刚刚创建的用户id为25,那么我希望在
sfGuardUserGroup
表中有一个条目,其中
user\u id
为25,
group\u id
8
(8是我要将这些用户添加到的组id)

我可以在form类中或在
processForm
操作中执行此操作吗

我用的是条令和SF1.4


谢谢

如果您需要为所有创建的sfGuardUser创建此行为,则应将此逻辑放入sfGuardUser类的模型中。[下面的例子]

// sfGuardUser class
public function save(Doctrine_Connection $conn = null) {

    if (!$this->hasGroup('group_name'))
        $this->addGroupByName('group_name', $conn);

    parent::save($conn);

}

如果仅在此特定表单上需要此功能,则应将逻辑放入表单中。向processForm操作添加逻辑是不正确的,因为您将在控制器中放置业务逻辑。

如果您需要为所有创建的sfGuardUser创建此行为,则应将此逻辑放入sfGuardUser类的模型中。[下面的例子]

// sfGuardUser class
public function save(Doctrine_Connection $conn = null) {

    if (!$this->hasGroup('group_name'))
        $this->addGroupByName('group_name', $conn);

    parent::save($conn);

}

如果仅在此特定表单上需要此功能,则应将逻辑放入表单中。向processForm操作添加逻辑将是不正确的,因为您将在控制器中放置业务逻辑。

这将满足您的需要:

<?php

class AdminUserForm extends sfGuardUserForm
{
  public function configure()
  {
    //customise form...
  }

  public function save($con = null)
  {
    //Do the main save to get an ID
    $user = parent::save($con);

    //Add the user to the relevant group, for permissions and authentication
    if (!$user->hasGroup('admin'))
    {
      $user->addGroupByName('admin');
      $user->save();
    }

    return $user;
  }
}

这应该满足您的需要:

<?php

class AdminUserForm extends sfGuardUserForm
{
  public function configure()
  {
    //customise form...
  }

  public function save($con = null)
  {
    //Do the main save to get an ID
    $user = parent::save($con);

    //Add the user to the relevant group, for permissions and authentication
    if (!$user->hasGroup('admin'))
    {
      $user->addGroupByName('admin');
      $user->save();
    }

    return $user;
  }
}

用户对组的设置将在
save()
方法中?我添加了一个代码示例。这将适用于在该类的模型中创建为它的sfGuardUser对象的所有实例。感谢您的代码。但是它给了我一个错误:
orderAdminProfileForm::save()的声明应该与sfFormObject::save()的声明兼容。
它应该放在sfGuardUser类中(模型不是表单)。如果需要将组添加到sfGuardUser的所有实例中,则会出现这种情况。如果不使用Evilly提供的示例,用户对组的设置将在
save()
方法中?我添加了一个代码示例。这将适用于在该类的模型中创建为它的sfGuardUser对象的所有实例。感谢您的代码。但是它给了我一个错误:
orderAdminProfileForm::save()的声明应该与sfFormObject::save()的声明兼容。
它应该放在sfGuardUser类中(模型不是表单)。如果需要将组添加到sfGuardUser的所有实例中,则会出现这种情况。如果没有,请使用evilceleryNOTE提供的示例:您可以将parent::save($con)行移到末尾,以避免对DB进行两次保存。好的,因此这似乎对用户的初始创建起作用。但是当我尝试编辑时,我得到了一个错误:
SQLSTATE[23000]:完整性约束冲突:1062重复条目'31-3'用于键'PRIMARY'
,如果我随后将parent::save()移动到我得到的末尾:
注意:未定义变量:user
我添加了一个检查,应该修复完整性约束冲突OK,检查记录
是否为新记录
。似乎可以工作,只需要再做一些测试。注意:您可以将parent::save($con)行移到末尾,以避免对数据库进行两次保存。好的,这似乎可以在用户的初始创建时工作。但是当我尝试编辑时,我得到了一个错误:
SQLSTATE[23000]:完整性约束冲突:1062重复条目'31-3'用于键'PRIMARY'
,如果我随后将parent::save()移动到我得到的末尾:
注意:未定义变量:user
我添加了一个检查,应该修复完整性约束冲突OK,检查记录
是否为新记录
。看起来很有效,只需要再做几次测试