@magary4

Обьсните пользу многочисленных абстракций на примере zfcUser?

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

ну вот к примеру нужна аунтификация на ajax. мой код (упрошенный)
public function loginAction() {
	$user = $this->getServiceLocator()->get('some-service-for-make-sql-request')->search(['email'=>$_REQUEST['email'],'pwd'=>$_REQUEST['pwd']]); // service makes some crypt for 'pwd' before sql request
	$result = $user ? ['message'=>'ok','userdata'=>$user] : ['message'=>'fail','userdata'=>$user];
	return new JsonModel($result);
}


как это сделать на zfcuser? спрашиваю у гугла вот
.....
$this->getRequest()->getPost()->set('identity', $data['identity']);
$this->getRequest()->getPost()->set('credential', $data['credential']);
$this->zfcUserAuthentication()->getAuthAdapter()->resetAdapters();
$this->zfcUserAuthentication()->getAuthService()->clearIdentity();
$adapter = $this->zfcUserAuthentication()->getAuthAdapter();
$adapter->prepareForAuthentication($this->getRequest());
$auth = $this->zfcUserAuthentication()->getAuthService()->authenticate($adapter);
if (!$auth->isValid()) {
......

и это только отрывок кода

возьмем модуль bjyauthorize. да можно настроить доступ через конфиг. умолчу что тоже самое можно сделать написав 10 строчек кода в module.php проверив имя модуля контроллера и экшена. ну вот в реальном проекте, пользователь пытается редактировать запись, мне надо проверить в этой записе его user_id или чужой. как?
  • Вопрос задан
  • 3334 просмотра
Пригласить эксперта
Ответы на вопрос 1
  1. ZF2 - это "чистый" PHP на основе php-patteens. В нём нет готовых решений для реализации того или иного функционала, всё надо делать вручную. Чтобы понять его низкоуровневый слой абстракции, нужно на очень высоком уровне знать сам PHP, его тонкости и нюансы, встроенные особенности, и понимать php-patteens, ибо их там немереное количество. Я очень люблю сравнивать PHP-framework с музыкой, и ZF2 у меня асоциюеться с Rammstein, то есть ну ОООчень жесткий (hardcore), к чему я это всё виду - к тому, что у этого framework-а очень большой порог вхождения, и в изучении затруднительный даже для продвинутых разработчиков. Это не значит что он плох, да - он сложный, но web-приложение на нём будет будет радовать вас своей производительности, с которой не сравнится ни один PHP-framework. (при условии, что вы не используете готовые сторонние решения, такие как объектно-реляционное отображение, шаблонизаторы, и т.д.)
  2. Насчёт слоёв абстракции, в большинстве случаев вы будете иметь дело с ServiceManager - это всего лишь контейнер других экземпляров классов. То есть если вы создали форму, то вы можете поместить её в этот контейнер, а позже, когда она вам понадобится, просто извлечь её оттуда. (по умолчанию возвращается один и тот же объект, но вы можете это изменить, возвратить конкретно для какого то случая новый объект). Так же вы можете определить какой то класс бизнес-логики как службу, и использовать её на уровне всего приложения (так же можете её настроить как хотите). Можете ещё к всему этому подключить в дело компонент EventManager - и делать какие то действия, когда произойдёт любое событие в web-приложении.
  3. Гидратор - это процесс заполнение объекта данными, или наоборот - извлечение этих данных из объекта. Данные - это в большинстве случаев обычные свойства класса, и на выходите вы получите объект в виде массива, то есть объект без методов, лишь с одними свойствами. Вот как это работает в ZF2: пользователь вводит данные в форму и отправляет их на сервер, система их получает, преобразует обычные строковые данные с помощью гидратора в объект-прототип (то, что я выше писал, в объект в виде массива). Что же этот объект-прототип из себя представляет?! Как выше писалось, это обычный класс с одними свойствами. Свойства должны быть либо защищёнными, или приватными, а также в этом классе допускается использовать методы доступа к этим свойствам (get и set). После того, как наш объект-прототип наполнился данными, мы можем с ними манипулировать, например поместить в базу данных (разумеется мы должны данные фильтровать и проверять на валидность как при получение с формы, так и помещении в БД). Процессом заполнения данных в БД тоже занимается гидратор.
  4. Если вы работали с ORM, то наверняка заметили большое сходство. По большому счёту, то что я выше описал, реализовано в самой DoctrineORM. Получается что ZF2 реализовал свой "собственный велосипед", какой пока ещё не доведён до совершенства. Хотя если сравнять производительность, то ZF2 вне конкуренции. Но если надо будет реализовать крупную систему, то альтернатива ZF2 ещё пока не подходит, она не сможет проявить весь ваш потенциал системы. Можно попытаться дописать этот "велосипед", или на его основе создать собственную систему объектно-реляционного отображения, но для этого надо иметь очень большие знания в этой области. К стати, чтобы добиться производительности, надо использовать расширение mysqli, а не PDO.
  5. На основе выше мною сказанного, вы должны понимать, что возможно для ваших задач вполне подойдёт Symfony, ибо вам придётся очень много потратить ресурсов, чтобы хоть как то сделать что-то стоящее на ZF2. Ведь если добавить в ZF2 DoctrineORM и шаблонизатор-Twig, то сам framework станет не лучше SF2, я бы сказал что ещё хуже, ибо упадёт производительность и будет очень сложно поддерживать. Поэтому я лично для себя решил, если мне надо что-то сделать действительное стоящее, с большой производительностью, и чтобы это был сугубо только чистый PHP, то я выберу Zend Framework; а если мне нужно web-приложение с умеренной производительностью, и сделать его приложив при этом минимальные усилия, то я выберу Symfony. В любом случае, выбирайте то, что подходит лучше для вашей задачи, выбор за вами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы