2013-06-18 6 views
0

Я работаю над модулем, который использует sfDoctrineGuard плагина в качестве базы (средства используют sfDoctrineGuard), поэтому в моем модуле я разработал этот код:Создание отношения новых пользователей не сохраняется, что не так?

class UsuariosForm extends sfGuardUserForm { 
    protected $current_user; 

    public function configure() { 
     unset(
       $this['is_super_admin'], $this['updated_at'], $this['groups_list'], $this['permissions_list'], $this['last_login'], $this['created_at'], $this['salt'], $this['algorithm'] 
     ); 

     $id_empresa = sfContext::getInstance()->getUser()->getGuardUser()->getSfGuardUserProfile()->getIdempresa(); 
     $this->setDefault('idempresa', $id_empresa); 

     $this->current_user = sfContext::getInstance()->getUser()->getGuardUser(); 

     $this->validatorSchema['idempresa'] = new sfValidatorPass(); 

     $this->widgetSchema['first_name'] = new sfWidgetFormInputText(array(), array('class' => 'input-block-level')); 
     $this->widgetSchema['last_name'] = new sfWidgetFormInputText(array(), array('class' => 'input-block-level')); 
     $this->widgetSchema['username'] = new sfWidgetFormInputText(array(), array('class' => 'input-block-level')); 
     $this->widgetSchema['email_address'] = new sfWidgetFormInputText(array(), array('class' => 'input-block-level')); 
     $this->widgetSchema['password'] = new sfWidgetFormInputPassword(array(), array('class' => 'input-block-level')); 
     $this->widgetSchema['password_confirmation'] = new sfWidgetFormInputPassword(array(), array('class' => 'input-block-level')); 

     $this->validatorSchema['password']->setOption('required', true); 
     $this->validatorSchema['password_confirmation'] = clone $this->validatorSchema['password']; 

     $this->widgetSchema->moveField('password_confirmation', 'after', 'password'); 

     $this->mergePostValidator(new sfValidatorSchemaCompare('password', sfValidatorSchemaCompare::EQUAL, 'password_confirmation', array(), array('invalid' => 'The two passwords must be the same.'))); 
    } 

    public function save($con = null) { 
     if (sfContext::getInstance()->getActionName() == "create" || sfContext::getInstance()->getActionName() == "new") { 
      $new_user = parent::save($con); /* @var $user sfGuardUser */ 
      $new_user->addGroupByName('Monitor'); 
     } 

     return $new_user; 
    } 

} 

Первая функция позволяет мне иметь свою собственную форму вместо sfDoctrineGuard плагина а второй - переопределение метода save() для добавления группы по умолчанию к новым пользователям, которые я создаю. Я хочу также добавить по умолчанию idempresa, как вы можете заметить (в функции config()), но он не работает, может быть, я что-то делаю неправильно или не знаю. idempresa - это поле, хранящееся в таблице sfGuardUserProfile, и, конечно, настроенные отношения и так далее. Мой вопрос здесь: каким должен быть правильный способ установить по умолчанию idempresa, чтобы настроить профиль при создании пользователей?

ответ

1

Вы должны сохранить $new_user объект снова: $new_user->save($con)

Также вы не должны проверить ACTION_NAME в методе сохранения(), вы можете проверить его объект новым или нет. У Objectform есть метод для этого.

<?php 
    ... 
    public function save($con = null) 
    { 
     $new_user = parent::save($con); 
     if($this->isNew()) 
     { 
      $new_user->addGroupByName('Monitor'); 
      $new_user->save($con); //this saves the group 
     } 
     return $new_user; 
    } 
    ...