sfDoctrineGuard - как ВСЕГДА присоединиться к sfGuardProfile к sfGuardUser - PullRequest
1 голос
/ 01 мая 2010

Я хочу сделать так, чтобы в любое время дБ запрашивалось для sfGuardUserProfile, оно автоматически соединялось и гидратировалось с соответствующими sfGuardUser.

Если бы я использовал Propel 1.2, я обычно переопределял бы метод doSelectStmt класса sfGuardUserProfilePeer для проверки Criteria и изменения его по мере необходимости, а также изменения метода hydrate класса sfGuardUserProfile , Хотя я не уверен, как это сделать в Учении.

Ответы [ 2 ]

8 голосов
/ 01 мая 2010

Вы можете использовать прослушиватели событий. Подробнее о них читайте в документации доктрины: Прослушиватели событий

В symfony 1.4 можно изменить sfGuardUser. По умолчанию это в lib / model / doctrine / sfDoctrineGuardPLugin / sfGuardUser.class.php. Вы можете добавить следующий метод preDqlSelect () для изменения запроса. Обратите внимание, что это не проверено.

class sfGuardUser extends PluginsfGuardUser
{
  public function preDqlSelect($event)
  {
    $params = $event->getParams();
    $query  = $event->getQuery();
    $alias  = $params['alias'] . '.Profile';
    if ((!$query->isSubquery() || ($query->isSubquery() && $query->contains(' ' .     $params['alias'] . ' '))) && !$query->contains($alias)) 
    {   
      $query->innerJoin($alias);
    }   
  }
}

Чтобы это работало, вам нужно включить обратные вызовы DQL. Вы можете сделать это в вашем классе ProjectConfiguration:

  class ProjectConfiguration extends sfProjectConfiguration
  {
    public function configureDoctrine(Doctrine_Manager $manager)
    {  
      $manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, true);
    }  
  }
1 голос
/ 01 мая 2010

Хотя я согласен с Коронатом, я думаю, что то, что вы хотите сделать, может быть достигнуто с помощью:

http://www.symfony -project.org / плагины / sfGuardPlugin

См. «Настройка модели sfGuardUser».

По сути, профиль должен называться "sf_guard_user_profile" и отношение должно быть установлено, и тогда вы сможете использовать:

$this->getUser()->getGuardUser()->getProfile();

Я думаю, что правильное имя модели профиля необходимо для некоторых конфигурационных файлов, но я могу ошибаться.

...