Проверка подлинности пользователя Zend Framework (вопрос MVC)

У меня проблемы с пониманием концепций MVC.

Я строю модель пользователя, понимаете? Application_Model_Users. Говорят, что модели должны содержать только структуру ... а бизнес-логику нужно поместить в контроллер.

Итак, рассмотрим функцию с именем Authenticate ($ user, $ password). Эта функция вернет истину, если введенные имя пользователя и пароль действительны, или ложь в противном случае. Где мне поставить эту функцию? В контроллере Authentication или в модели Users?

Спасибо!


person Rafael    schedule 08.06.2011    source источник


Ответы (2)


В связи с моделью, когда вам нужно получить данные (из БД, веб-службы, файловой системы) или сохранить данные, вам понадобится модель для выполнения этой работы. В MVC модель не понимается как сопоставленная таблица, возможно, больше как сопоставитель. У Zend есть информация об этом на своем сайте, это может помочь вам немного лучше понять mvc.

Когда дело доходит до аутентификации пользователя, вы обязательно должны реализовать функцию аутентификации внутри модели Users, я думаю, вы выполните проверку базы данных по таблице или аналогичному. На случай, если вы еще не используете его, Zend поставляется с пакетом для аутентификации: Zend_Auth (http://framework.zend.com/manual/en/zend.auth.html), он может ускорить реализацию безопасности на вашем применение.

person Orlando    schedule 08.06.2011

Хотя операции модели часто включают операции хранения (БД, сервисер и т. Д.), Это не ограничивается этим. Модель, насколько мне известно, должна включать объекты бизнес-логики, то есть классы, которые представляют ваши бизнес-объекты, такие как User, Person, Customer и т. Д. Каждый класс должен определять свои собственные методы работы, например, класс модели Person должен позволяют узнать имя человека, рассчитать его возраст по дате рождения и т. д.

Также должны быть специализированные классы для хранения и извлечения Модели. С помощью этих классов вы можете получить всех своих клиентов или только одного, используя определенные условия и т. Д., Или сохранить измененный экземпляр класса Customer (например, клиент изменил свой адрес или номер телефона).

Это отделяет операции хранения / извлечения от операций входа в систему.

Итак, согласно вашему вопросу, ваша модель может иметь класс, который позволяет вам находить одного пользователя по его имени пользователя и паролю. Если пользователь найден, вы можете вернуть экземпляр класса Model_User (в примере). Затем, используя стандартный класс Zend_Auth или расширяя его для создания собственного класса аутентификации, вы можете использовать некоторые параметры формы входа в систему для выполнения аутентификации пользователя.

Следуйте краткому руководству по началу работы с Zend Framework, там есть основы MVC в Zend Framework. Кроме того, там вы найдете некоторые ресурсы о Zend_Db и связанных классах, чтобы обеспечить взаимодействие с БД. Существуют также классы Zend_Db_Table, Zend_Db_Table_Rowset и Zend_Db_Table_Row, которые вы можете расширить в соответствии с потребностями хранения вашей модели.

У меня есть личное решение, в котором я расширяю Zend_Db_Table для моего (в примере) класса Model_UserTable, используемого для хранения или запроса моих сущностей Model_User. А мой класс Model_User расширяет Zend_Db_Table_Row.

person David    schedule 08.06.2011