如何解决symfony 1.4-将当前登录用户注入到Doctrine模型中
| 我想以充分的可测试性将当前登录用户的ID注入Doctrine_Record类的creator_id字段中,而不使用sfContext单例。我发现了几种教义行为,例如http://www.symfony-project.org/plugins/sfDoctrineActAsSignablePlugin,但是它们在侦听器中访问了sfContext单例,或者(在我发现的另一个示例中)在Doctrine_Record子类的save方法中访问了sfContext单例。 。 我想在symfony控制器中找到一个入口点,在这里我可以注入当前登录的用户并将其保留到请求结束。 我该怎么办? 希望我已经足够清楚了。 编辑: 如@jeremy所建议,我做了一个自定义过滤器:class userFilter extends sfFilter
{
public function execute($filterChain)
{
$user = $this->getContext()->getUser();
if ($user->isAuthenticated()) {
$guard = $user->getGuardUser();
Doctrine_Manager::getInstance()->setAttribute(\'logged_in_user\',$guard->getId());
}
// Execute next filter
$filterChain->execute();
}
}
因此,现在我的测试和任务都没有sfContext了,我只需要在开始与db的交互之前的某个时候设置适当的用户ID即可:
Doctrine_Manager::getInstance()->setAttribute(\'logged_in_user\',sfConfig::get(\'default_user\'));
解决方法
好问题!到处都使用ѭ2是Symfony 1的较丑陋的方面之一,将其设置为
Doctrine_Manager
听起来是个好主意。
最好在ProjectConfiguration
中发生的configureDoctrine
回调中执行此操作(请参见下文)。目前,我还不是100%存在用户,否则,您最好的选择是自定义过滤器(参考)。
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->setParam(\'user_id\',sfContext::getInstance()->getUser()->getGuardUser()->getId());
}
,感谢您提出这个问题。考虑到这一点,我编写了http://www.symfony-project.org/plugins/sfAuditablePlugin。我基本上对返回userId的方法进行了外部化,因此您可以从会话,教义参数或任何您有的地方获取userId。
这是用于配置返回包含user_id和user_name的数组的方法的设置
# Retrieve User Array from custom implementation
# [0] => (int)user_id; [1] => (string)user_name;
getUserArray:
class_name: Utility
static_method_name: getUserAuditArray
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。