我需要一些帮助来理解这是如何工作的。请参阅我正在使用sfDoctrineGuardPlugin
并添加配置文件表,如下所示:
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
中的登录用户设置字段值,因为我需要访问idempresa
上的sf_guard_user_profile
,但我不知道如何: - (我试过这一切:
$user = sfContext::getInstance()->getUser();
echo $user->getGuardUser()->getProfile()->getIdempresa();
echo $this->getUser()->getGuardUser()->getProfile()->getIdempresa();
echo $user->getProfile()->getIdempresa();
且无效,这是根据我的架构定义访问配置文件字段的正确方法吗?任何人都可以简单地解释一下我必须如何理解这一点,以便在事情发生变化的某一天不会产生同样的怀疑吗?
修改
我找到了解决方案,但是使用许多人认为错误的sfContext::getInstance()
,所以在这种情况下,正确的方法是什么。下面的代码适用于我:
$user = sfContext::getInstance()->getUser()->getGuardUser()->getSfGuardUserProfile()->getIdempresa();
PS:我可以从SdrivingEmisorForm
班级
答案 0 :(得分:1)
您将foreignAlias定义为SfGuardUserProfile,因此您应该将此名称用于getter。 在某些行动中:
$profile = $this->getUser()->getGuardUser()->getSfGuardUserProfile();
在某些模板中:
$profile = $sf_user->getGuardUser()->getSfGuardUserProfile();
然后:
echo $profile->getIdempresa();