Лучший способ использовать сессии с MVC и OO PHP - PullRequest
2 голосов
/ 04 октября 2008

Я работал с сессиями, MVC-дизайном и объектно-ориентированным PHP. Где я должен сохранить или извлечь данные из сеанса? Я хотел бы получить его изнутри методов, поэтому мне не нужно передавать данные в методы. Какая лучшая практика?

Ответы [ 5 ]

3 голосов
/ 05 октября 2008

Лично я большой поклонник класса-оболочки Zend_Session . Я предпочитаю работать с данными в объектно-ориентированном стиле, и преимущество использования пространства имен в использовании обертки - огромный плюс.

Что из этого выглядит лучше для вас?

$_SESSION['Zend_Auth']['user'] = "myusername";

или

$authNamespace = new Zend_Session_Namespace('Zend_Auth');
$authNamespace->user = "myusername";

Я предпочитаю внешний вид, который дает вам использование аксессоров.

Примечание: В системе MVC, независимо от того, какой метод вы выберете, вы всегда должны получать / устанавливать данные сеанса в вашем контроллере.

3 голосов
/ 04 октября 2008

Я обычно помещаю это в контроллер. Это просто имеет смысл. Контроллер решает, что происходит, и почему бы не позволить ему решить, разрешено ли людям выполнять запрошенные действия. Как правило, у вас есть несколько контроллеров в системе MVC. Например. BaseController (абстрактный - общий), NonSessionController расширяет BaseController (например: используется для статических страниц), SessionController расширяет BaseController (первичная передача сеанса здесь - это может быть абстрактно). Если у вас есть, например, разные типы пользователей, вы можете захотеть полиморфировать этот контроллер, например: AdminController, UserController и т. Д.

1 голос
/ 04 октября 2008

Я пробовал это несколькими способами, включая использование статического класса-обертки для его обработки, но я всегда возвращаюсь к простому использованию суперглобального массива. Я все еще использую обертку для проверок подлинности и других повторяющихся задач, но, в конечном счете, мне проще и менее многословно использовать стоковую настройку.

0 голосов
/ 04 октября 2008

Я бы не стал беспокоиться об обертках сессий. Вы не получите достаточно, чтобы заслужить ограничения. Проходя через суперглобальный, вы можете использовать любую (надеемся, здравую) структуру данных, какую захотите. Мои данные сеанса всегда заканчиваются двумя или более уровнями данных массива, что слишком утомительно, чтобы ими управлять через оболочку сеанса.

Superglobal даже не ограничивает вас в том, чтобы PHP сохранял ваши данные сеанса в базе данных, используя обработчик сохранения , что весьма неплохо для масштабируемости.

0 голосов
/ 04 октября 2008

Я думаю, что это зависит от области, в которой будут использоваться извлеченные данные, если они используются только внутри метода, тогда почему вы должны извлекать их извне, а сессия всегда доступна в суперглобальных переменных, лучше ее локализовать только при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...