Доступ к пользовательскому сеансу Symfony в модели (Doctrine) - PullRequest
4 голосов
/ 15 декабря 2010

Как получить доступ к текущему сеансу пользователя Symfony в модели Doctrine?

Два способа (которые я знаю) сделать это - вытащить его из sfContext внутри модели:

sfContext::getInstance()->getUser()->getCanSwim();

Или передать экземпляр (или фрагмент) sfUser напрямую.к модели с контроллера:

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

Но какой из этих методов лучше, чем другой, или это неправильный способ сделать все это?

Ответы [ 3 ]

5 голосов
/ 15 декабря 2010

Это может представлять интерес:

http://webmozarts.com/2009/07/01/why-sfcontextgetinstance-is-bad/

4 голосов
/ 15 декабря 2010

В таких ситуациях вам следует рассмотреть возможность использования шаблона проектирования Dependency Injection в качестве Fabien Potencier , ясно объясняющего .

Идея заключается в том, что1007 * Внедрите в ваш зависимый объект все его зависимости, такие как - в вашем случае - пользователь или контекст.

Это (второй вариант) будет менее пугающим MVC, как ни странно.

2 голосов
/ 16 декабря 2010

Внедрение зависимостей - исключительный контекст, но я думаю, что иногда это излишнее.

Зачем реализовывать дополнительный метод или переопределять конструктор, если единственное, что вам нужно, в вашем примере, это знатьесли текущий пользователь может плавать?

Итак, IMMO, если сценарий использования прост, вы можете очень хорошо перейти на второй вариант, который вы предоставили, и снизить зависимость до значения, которое онзависит от:

goSwimming($sf_user->can_swim);

Конечно, все зависит от используемых концепций и от того, насколько расширен один класс от другого.

Если это только этот случай (результатв зависимости от умения пользователя плавать), тогда это можно упростить.Но если вызываемый метод / класс может в конечном итоге использовать больше атрибутов, то, вероятно, лучше использовать технику внедрения зависимостей, которая уже обсуждалась.UserTable может зависеть от sfUser для других вещей, так что это похоже на полную зависимость от класса.

...