Ни для кого не секрет, что Zend_OpenID не всегда работает так, как хотелось бы.
Сегодня я столкнулся с тем, что этот компонент не принимал ответ от openID-сервера google, выдавая ошибку “Discovery failed”. После изучения исходных кодов я выяснил, что необходимый для корректной валидации код просто отсутствует в компоненте. Пришлось воспользоваться грязным хаком (источник):
-
В метод Zend_OpenId_Consumer::_discovery(), в серию условий if preg_match (начало около строки 740), надо добавить следующий блок:
1 2 3
| } else if (preg_match('/<URI>([^<]+)<\/URI>/i', $response, $r)) {
$version = 2.0;
$server = $r[1]; |
-
Класс тот же, метод _checkId(). В блок if ($version <= 2.0), в if ($this->_session !== null) надо добавить:
1 2 3 4
| if ($server == 'https://www.google.com/accounts/o8/ud') {
$this->_session->identity = 'http://specs.openid.net/auth/2.0/identifier_select';
$this->_session->claimed_id = 'http://specs.openid.net/auth/2.0/identifier_select';
} |
-
Там же, следующая ветка – else if (defined(‘SID’)):
1 2 3 4
| if ($server == 'https://www.google.com/accounts/o8/ud') {
$_SESSION['zend_openid']['identity'] = 'http://specs.openid.net/auth/2.0/identifier_select';
$_SESSION['zend_openid']['claimed_id'] = 'http://specs.openid.net/auth/2.0/identifier_select';
} |
-
Там же, вне if/else if/else ветки, но внутри $version <= 2.0:
1 2 3 4
| if ($server == 'https://www.google.com/accounts/o8/ud') {
$params['openid.identity'] = 'http://specs.openid.net/auth/2.0/identifier_select';
$params['openid.claimed_id'] = 'http://specs.openid.net/auth/2.0/identifier_select';
} |
Конечно, это некрасивое решение, но оно приемлемо до тех пор, пока этот баг не будет закрыт.
Posted by Сергей on 17 октября 2009 at 22:32 under Авторизация и аутентификация, Руководства.
3 Comments.
Недавно на сайте http://fbdevzone.com/ был рассмотрен удобный способ передачи URL-параметров в действия.
Обычно для этой цели используются методы $this->_getParam() и $this->getRequest()->getParam() в классах контроллера. Это довольно удобный способ, однако он не идеален — прописывать это из метода в метод не очень удобно.
Предложенный способ заключается в том, что параметры передаются в действия в виде аргументов метода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| /**
* index/info/
* index/info/tags/one/tags/two
* index/info/msg/msg-only
* index/info/date/2009-10-03
* index/info/msg/RandomOrder/date/2009-10-03
*
* @param array $tags
* @param Zend_Date $date
* @param string $msg
*/
public function infoAction (array $tags = null, Zend_Date $date = null, $msg = 'hello')
{
Zend_Debug ::dump($tags);
if (!is_null($date)) echo $date->get(Zend_Date ::DATETIME_FULL);
else echo "no date passed\n";
Zend_Debug ::dump($msg);
die;
} |
При помощи Zend_Reflection производится парсинг phpdoc-комментариев, присваивая переменным соответствующие типы.
Подробнее читайте в блоге автора. Там же вы найдёте исходный код класса.
Posted by Сергей on 13 октября 2009 at 22:47 under MVC-компоненты, Библиотеки для ZF, Руководства.
Tags: Zend_Controller, Zend_Controller_Router
6 Comments.
Здравствуйте.
Сегодня увидела свет новая версия Zend Framework. Ничего особенного, просто правка багов.
Список закрытых вопросов
Posted by Сергей on 13 октября 2009 at 21:03 under Новости.
Comment on this post.
Здравствуйте.
Думаю, многие из вас сталкивались с проблемой склонения существительных в зависимости от какого-либо числа. Например, “15 дней”. А если будет 21, выводить “21 дней”? Для решения этой проблемы написано множество функций, но я не встречал реализации в виде помощника Zend_View. Итак, встречайте: App_View_Helper_Plural.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Helper_View_Plural extends Zend_View_Helper_Abstract
{
public function plural($n, $form1, $form2, $form3) {
$plural = ($n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 or $n % 100 >= 20) ? 1 : 2));
switch($plural) {
case 0:
default:
return $form1;
case 1:
return $form2;
case 2:
return $form3;
}
}
} |
Использование (в шаблоне):
1 2 3
| echo '1 ' . $this->plural(1, 'день', 'дня', 'дней') . '<br>';
echo '4 ' . $this->plural(4, 'день', 'дня', 'дней') . '<br>';
echo '25 ' . $this->plural(25, 'день', 'дня', 'дней'); |
Вывод:
1 день
4 дня
25 дней
Надеюсь, этого поможет вам сделать ваши проекты более удобными для пользователей.
Всего доброго.
Posted by Сергей on 3 октября 2009 at 15:07 under Прочее, Руководства.
Tags: plural, Zend_View
7 Comments.
Команда разработчиков Zend Framework не перестаёт удивлять нас скоростью разработки. Скачать новую версию.
Следует отметить, что Preview Release предназначен исключительно для ознакомления, не следует использовать его в реальных проектах.
Новшества:
- Zend_Rest_Route, Zend_Rest_Controller и Zend_Controller_Plugin_PutHandler, которые позволяют использовать RESTful ресурсы как MVC-слой.
-
- Zend_Feed_Reader, который предоствляет общий API для RSS и Atom лент, а также кеширование и прочий функционал.
- Zend_Queue и Zend_Service_Amazon_Sqs, которые делают возможным использование локальных и удалённых сообщений и очередь сервисов для разгрузки асинхронных процессов.
- Обновления Zend_Db_Table позволяют использовать его как конкретный класс, передавая одно или больше определений таблицы через конструктор.
- Поддержка комменариев в Zend_Pdf, и некоторые улучшения производительности.
- Поддержка сборки собственных слоёв в Zend_Dojo.
- Многочисленные улучшения Zend_Ldap.
- Zend_Log_Writer_Syslog, компонент для логирования в системный лог.
- Несколько новых view-хэлперов, включая Zend_View_Helper_BaseUrl.
На следующей неделе запланирован выход бета-версии, стабильный релиз — через неделю или немного позже.
Posted by Сергей on 18 июля 2009 at 9:33 under Новости.
Comment on this post.
Сегодня вышел Zend Framework 1.8.1. Несмотря на то, что с момента выхода 1.8.0 прошло всего 13 дней, было исправлено более 68 багов.
Основные изменения:
- Zend_Loader::registerAutoload() теперь вызывает Zend_Loader_Autoloader и устанавливает флаг fallbackAutoloader в true. Подробнее о новом Zend_Loader_Autoloader.
- Много багфиксов и удобств в Zend_Application
- Добавлена генерация модулей при помощи Zend_Tool
Полный список доработок
Скачать новую версию
Posted by Сергей on 13 мая 2009 at 9:50 under Новости.
Tags: Zend_Application, Zend_Loader
1 Comment.
Ниже опубликован перевод статьи Matthew Weier O’Phinney Developing a Comprehensive Autoloader.
В этой статье я буду рассуждать о развитии и нововведениях Zend_Loader_Autoloader и смежного функционала. Тем не менее, основная цель статьи — показать различные проектировочные решения, которые ведут к созданию всеобъемлющего автозагрузчика для ваших PHP-приложений. Автозагрузка, внешне тривиальная задача, имеет много тонкостей, которые часто упускают.
Continue reading ‘Разработка всеобъемлющего автозагрузчика’ »
Posted by Сергей on 8 мая 2009 at 13:28 under Прочее, Руководства.
Tags: Zend_Application, Zend_Loader, Zend_Tool, основы
8 Comments.
Всем привет.
Публикую перевод статьи Matthew Weier O’Phinney Zend Framework 1.8.0 Released.
Я рад объявить о выходе Zend Framework 1.8.0, первом в серии релизов ветки 1.8. Этот релиз отмечен кульминацией нескольких продолжительных проектов, а также формализацией многих из рекомендованных нами практик разработки.
Два основных направления этого релиза: во-первых, добавление нескольких компонентов, предназначенных для RAD (Rapid Application Development – быстрая разработка приложений); во-вторых, два дополнения, которые делают использование Zend Framework в вычислительных облаках более простым.
Скачать Zend Framework
Continue reading ‘Вышел Zend Framework 1.8.0’ »
Posted by Сергей on 2 мая 2009 at 10:27 under Новости.
Tags: Zend_Application, Zend_Tool
Comment on this post.
Всем привет.
Сегодня вышел preview release Zend Framework 1.8.0. Финальный релиз этой версии запланирован на этот месяц (Апрель 2009). Скачать его (исключительно для ознакомления).
В новой версии появились два компонента, Zend_Application и Zend_Tool.
Zend_Application предназначен для бутстраппинга вашего приложения. Подробнее о нём вы можете почитать в документации и в статье Роба Аллена.
Zend_Tool – это фреймворк, предоставляющий функциональность для скаффолдинга, генерации кода, генерации поискового индекса и многого другого. Например, можно развернуть скелет ZF приложения, запустив всего пару команд в консоли. Подробнее читайте в документации и вводной статье.
Осталось только напомнить, что этот релиз предназначен исключительно для ознакомления и не готов к использованию в реальных проектах.
Глоссарий.
- Бутстраппинг
- Начальная загрузка приложения. В данном контексте означает процесс инициализации необходимых компонентов, подключение к БД и прочие действия, выполняемые перед процессом диспатчинга.
- Скаффолдинг
- Процесс постоения форм для управления данными на основе анализа БД.
Posted by Сергей on 8 апреля 2009 at 9:58 under Новости.
Tags: Zend_Application, Zend_Tool
9 Comments.
Zend_Filter_Input совершенно незаслуженно был обойдён вниманием со стороны разработчиков. На практике он способен во многих ситуациях заменить уже ставший привычным Zend_Form.
Continue reading ‘Обработка данных с помощью Zend_Filter_Input’ »
Posted by Сергей on 16 февраля 2009 at 11:00 under Руководства, Формы и обработка входных данных.
Tags: Zend_Filter_Input, Zend_Validate
20 Comments.