Model view controller 访问模型中的Symfony用户会话(条令)

Model view controller 访问模型中的Symfony用户会话(条令),model-view-controller,symfony1,model,doctrine,symfony-1.4,Model View Controller,Symfony1,Model,Doctrine,Symfony 1.4,在Doctrine的模型中,如何访问Symfony的当前用户会话 有两种方法(据我所知)可以从模型内部的sfContext中提取它: sfContext::getInstance()->getUser()->getCanSwim(); 或者,将sfUser实例(或片段)直接从控制器传递到模型: UserTable::goSwimming($sf_user->can_swim); 但是,这些方法中有哪一种比另一种更好,或者这不是完成所有工作的正确方法吗?这可能会引起人们的兴趣

在Doctrine的模型中,如何访问Symfony的当前用户会话

有两种方法(据我所知)可以从模型内部的sfContext中提取它:

sfContext::getInstance()->getUser()->getCanSwim();
或者,将sfUser实例(或片段)直接从控制器传递到模型:

UserTable::goSwimming($sf_user->can_swim);

但是,这些方法中有哪一种比另一种更好,或者这不是完成所有工作的正确方法吗?

这可能会引起人们的兴趣:


< p>对于这种情况,你应该考虑使用Fabien Potencier。< /P> 其思想是,您必须将依赖对象的所有依赖项注入到依赖对象中,例如(在您的情况下)用户或上下文


这(第二种选择)将是不太会扼杀MVC的方式,afaic。

依赖注入是一种特殊的环境,但我认为有时这是一种过度扼杀

在您的示例中,如果您只需要知道当前用户是否可以游泳,那么为什么要实现其他方法或重写构造函数呢

因此,IMMO,如果用例很简单,您可以选择您提供的第二个选项,并将依赖性降低到它所依赖的值:

goSwimming($sf_user->can_swim);

当然,这一切都取决于实际使用的概念,以及一个类与另一个类的扩展程度


如果只是这种情况(结果取决于用户的游泳能力),那么可以简化。但是,如果被调用的方法/类最终能够使用更多的属性,那么最好使用已经讨论过的依赖注入技术。UserTable可能在其他方面依赖于sfUser,因此这感觉像是一个完整的类依赖关系。

我看过那篇文章,但想知道这两种方法。人们似乎提出了相反的建议,但我很好奇其他人对“正确”方式的看法。我偶尔会使用sfContext,当它看起来是一个方便的解决方案时,但我认为您的情况(当您处理一个类时),最好不要使用它,这样在使用任务等时它就不会中断。汤姆-我很好奇。什么时候才是方便的解决方案?@Jamie。。。例如,在自定义帮助器类中加载Symfony帮助器时。例如,我可能有一个自定义帮助程序,它在不同SERP的底部呈现分页链接,我需要访问Symfony URL帮助程序来调用URL_For@或link_to@而不是硬编码路由。仅在呈现模板时才需要调用此帮助器。但我肯定有人会告诉我应该做一些其他面向对象的事情。