Создать объект при сохранении другого - PullRequest
0 голосов
/ 16 февраля 2012

В моей базе данных есть таблицы: "клиенты" , "userProfile" и "sfGuardUsers"

Я хочу, чтобы система создала профиль и пользователя при создании нового клиента. Вот что у меня есть:

in lib / form / doctrine / ClientForm.class.php :

class ClientForm extends BaseClientForm
{
  public function configure()
  {
    parent::configure();

    $userProfileForm = new UserProfileForm($this->object->UserProfile->user);
    $this->mergeForm($userProfileForm);
  }
}

in modules / client / action / actions.class.php :

class clientActions extends autoClientActions
{
  public function executeCreate(sfWebRequest $request)
  {
    parent::executeCreate($request);
    $this->client->createProfile($request->getParameter('email'),$request->getParameter('password'));
  }

in lib / model / doctrine / Client.class.php :

  public function createProfile($email, $password)
  {
    $profil = Doctrine_Core::getTable('UserProfile')->findOneByClientId($this->getId());
    $profil->createUser($email, $password);
    $profil->setClient($this);
    $profil->save();
  }

Согласно журналу, вызывается createProfile(null, null), и mysql создает пользователя с '' в качестве имени пользователя: (

1 Ответ

2 голосов
/ 16 февраля 2012

Вам не нужно этого делать. Проверьте файл readme. Вам нужно это в app.yml:

sf_guard_plugin:
  profile_class:      sfGuardUserProfile
  profile_field_name: user_id

И, конечно же, в вашей схеме БД при определении таблицы профиля вам также необходимо определить ее отношение с помощью sf_guard_user table.

Плагин сделает все остальное за вас (добавление / сохранение нового профиля при необходимости).

...