Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Повторное использование кода без модели 
:(
    Опции темы
BuShaRt
Дата 27.8.2013, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Возможно вопрос высосан из пальца и я вообще не в том направление веду размышления, но в любом случае, чтоб сориентироватсья мне нужна помощь... 

Есть у меня Zend Framework 2, хотя это не столь важно т.к. я почти уверен, что у других php framework-ов паттерн MVC реализован аналогично. В общем в ZF2 есть некоторые инструменты, позволяющие быстро реализовать авторизацию пользователя на сайте. В обычных условиях реализация этих инструментов размещается примерно на 10 строках кода, которые по сути принимают login && password и отдают result т.е. логика напрашивается быть инкапсулированной в класс, особенно если используется в других местах. Но с другой стороны это логика контроллера и инкапсулировать ее внутри логики модели, скажем, не совсем корректно. От сюда возникает вопрос. Стоит ли как-то оформлять эту логику и, если да, то как? Хелперы и плагины контроллера - подходят для этого?

В общем, где следует располагать повторяющуюся логику контроллеров?
 
PM MAIL   Вверх
ksnk
Дата 27.8.2013, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(BuShaRt @  27.8.2013,  15:39 Найти цитируемый пост)
 Но с другой стороны это логика контроллера и инкапсулировать ее внутри логики модели, скажем, не совсем корректно

Не понял. 
Есть, к примеру, разные варианты авторизации
- простая авторизация с логином-паролем админа, определенным в файле
- система авторизации с юзерами
- система авторизации с юзерами, группами и распределенной системой прав.
- вход на сайт с помощью .htpasswd - базовая аутентификация.

Это все разные контроллеры или разные модели? 

imho - модели, разве что последний случай, возможно, нуждается в поддержке со стороны контроллера, чтобы выковыривать логин пароль из нужного места.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
BuShaRt
Дата 27.8.2013, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Не совсем понял, поэтому возможно отвечу расплывчато.

Я очень опрометчиво назвал интересующий меня процесс авторизацией. На самом деле речь об аутентификации. На сайте есть несколько точек аутентификации с помощью логина и пароля (они имеют одинаковую логику, но разное представление). В сабже я вел речь именно о код реализующем логику аутентификации. Последующие действия, вроде разграничения доступа и т.п. не рассматриваются. Вот код, для наглядности.
Код

$post = $request->getPost();

$authService = $this->getServiceLocator()->get('Zend\Authentication\AuthenticationService');

$adapter = $authService->getAdapter();
$adapter->setIdentityValue($post['email']);
$adapter->setCredentialValue(md5($post['password']));

$authResult = $authService->authenticate();

if ($authResult->isValid()) {
    $user = $authResult->getIdentity();
    $authService->getStorage()->write($user);
}

$auth = ($authResult->isValid() == true ? $user : false );


Цитата

imho - модели, разве что последний случай, возможно, нуждается в поддержке со стороны контроллера, чтобы выковыривать логин пароль из нужного места. 

Тут я не понял. Вы наверно имели ввиду, что контроллер может нуждаться в поддержке модели ибо в противном случае не понимаю как без контроллера можно работать с моделью, если контроллер есть главный руководящий элимент.
PM MAIL   Вверх
ksnk
Дата 27.8.2013, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Теперь понятно, примерно. Этот код - контроллер, $authService- модель

Именно такой код каждый раз повторяется? В каждом новом контроллере? Может их (контроллеры) унаследовать от общего предка с таким методом аутентификации?

Можно сделать хелпер-метод в контроллере (базовом), который позволит сэкономить эти несколько строк. Вероятно,  получающий логин-md5(пароль) и возвращающий $auth. Это если промежуточные переменные удастся использовать прямо в методе. 

Логика контроллера от логики модели отличается параметрами, которыми они оперируют. Контроллер имеет право использовать GET/POST параметры, а модель - нет. Так что если при реализации метода модель не будет "знать" больше, чем она обязана знать сейчас, то хелпер-метод можно поместить и в модель.




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
georgiy11
Дата 27.8.2013, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



Один из вариантов родительский контроллер, но как говорится наследование самая сильная связь. 
Модуль/компонент аутентификации и делегирования прав контроллера модулю аутентификации более гибкий вариант. В этом случае связь существенно уменьшается. При всём этом смена версии/алгоритма аутентификации будет более гибкая.

Это сообщение отредактировал(а) georgiy11 - 27.8.2013, 19:35
PM MAIL   Вверх
BuShaRt
Дата 28.8.2013, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Спасибо за ответы. Т.к. я работаю с Zend Framework 2 и у него есть решение, позволяющие добавлять методы в контроллеры не за счет наследование (инструмент Conroller Plugin, который завязан на __invoke), то попробую реализовать через него, на опыте посмотрю во что это выльется.

Это сообщение отредактировал(а) BuShaRt - 28.8.2013, 09:35
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1838 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.