0

我需要一些帮助来了解这是如何工作的。请参阅我正在使用sfDoctrineGuardPlugin并添加一个 Profile 表,如下所示:

SfGuardUserProfile:
  connection: doctrine
  tableName: sf_guard_user_profile
  columns:
    id: { type: integer(8), primary: true }
    user_id: { type: integer(8), primary: false }
    idempresa: { type: integer(4), primary: false }
  relations:
    User:
      local: user_id
      class: sfGuardUser
      type: one
      foreignType: one
      foreignAlias: SfGuardUserProfile
      onDelete: CASCADE
      onUpdate: CASCADE

现在我需要根据登录用户设置一个字段值SdrivingEmisorForm,因为我需要访问但我不知道如何:-(我尝试了所有这些idempresasf_guard_user_profile

$user = sfContext::getInstance()->getUser();

echo $user->getGuardUser()->getProfile()->getIdempresa();
echo $this->getUser()->getGuardUser()->getProfile()->getIdempresa();
echo $user->getProfile()->getIdempresa();

并且没有工作,这是根据我的架构定义访问配置文件字段的正确方法?任何人都可以简要解释一下我必须如何理解这一点,以便在有一天事情发生变化时不会产生同样的疑问?

编辑 我找到了解决方案,但是使用sfContext::getInstance()which many say 是错误的,所以在这种情况下,正确的方法是什么。下面的代码对我有用:

$user = sfContext::getInstance()->getUser()->getGuardUser()->getSfGuardUserProfile()->getIdempresa();

PS:我是从SdrivingEmisorForm课堂上访问的

4

1 回答 1

1

您将 foreignAlias 定义为 SfGuardUserProfile,因此您应该将此名称用于 getter。在某些动作中:

$profile = $this->getUser()->getGuardUser()->getSfGuardUserProfile();

在一些模板中:

$profile = $sf_user->getGuardUser()->getSfGuardUserProfile();

然后:

echo $profile->getIdempresa();
于 2013-06-10T16:45:55.030 回答