Обновить
0

Zend Framework *

Свободный фреймворк для разработки веб-приложений

Сначала показывать
Порог рейтинга
Уровень сложности

Накопительная сборка ZF в один файл

Время на прочтение2 мин
Охват и читатели913
В тему объединения PHP-классов в Zend Framework'е (и других, следующих таким же соглашениям наименования и размещения) публикую свое решение, реализующее __autoload с накопительной сборкой автозагружаемых классов.

В нем учтены две известные проблемы:
  1. В файлах содержащих переменную __FILE__ осуществляется подстановка этой переменной.
  2. Обрабатывается случай параллельного выполнения скриптов.

Решение базируется на примере реализации __autoload из книги Дмитрия Котерова по PHP5 и идее описанной тут.
Читать дальше →

Сервис для сборки Zend Framework в один файл

Время на прочтение1 мин
Охват и читатели1.3K
Здравствуйте, уважаемые хабрачитатели!
Сей краткий пост посвящен небольшому сервису по сборке Zend Framework-a в один файл.
Зачем это делать, не раз уже писалось на хабре (например, тут), но если кому-то лень читать, я передам основной тезис: при использовании кэшера опкода (к примеру, eaccelerator) сборка фреймворка в один файл дает большой прирост производительности.
Сервис находится здесь. Кроме меня, его никто не тестировал, так что прошу сообщать о найденных багах.
На данный момент исходным материалом для сборок служит Zend Framework версии 1.10.2.
Буду рад, если кому-то это окажется полезным.

Zend_Db_Table_Select Dynamic Finder

Время на прочтение4 мин
Охват и читатели1.3K
Привет, Хабр! Dynamic Finder

Написал класс, использующий Zend_Db_Table_Select и позволяющий использовать Dynamic Finder в моделях в проектах на Zend Framework. Статья о том, что этот класс умеет, а также ссылка на исходный код предлагаются вашему вниманию.

Что это, зачем?



Dynamic Finder – способ, позволяющий получать данные из таблицы БД, записывая названия искомых полей в виде названия метода класса, а значения этих полей — в качестве аргумента метода. Например, может использоваться в экземпляре класса модели, связанной с какой-либо таблицей БД.

Dynamic Finder позволяет избежать написания ряда методов вида getById(…), getByLoginAndPassword(…), getAllByCountry(…) внутри модели в виде построения полноценных SQL-запросов и выборок. Вместо этого, в данной реализации достаточно подключить Dynamic Finder к модели должным образом, и, далее, программист может использовать эти методы модели непосредственно в контроллере или представлении. При этом реально эти методы в модели вообще не существуют.

Таким образом, экономится время работы программиста.

Dynamic Finder уже был реализован в том или ином виде в различных библиотеках и фреймворках, в частности, в Ruby on Rails.

В данной реализации Dynamic Finder является надстройкой, использующей Zend_Db_Select / Zend_Db_Table_Select, и предназначен для выборок из только одной таблицы.
Читать дальше →

Формы в Zend Framework

Время на прочтение6 мин
Охват и читатели13K
Меня часто спрашивают, какой мой любимый компонент в Zend Framework, и я всегда отвечаю: «Forms» (формы).
В парадигме модель-представление-контроллер формы всегда играют непростую роль. Конечно, форма — это всего лишь HTML,
но для меня это нечто более абстрактное.
По сути, форма — это HTML, средствами которого пользователь вводит и получает данные, но кроме этого форма еще выполняет
нормализацию, проверку, фильтрацию данных и вывод сообщений об ошибках, если они есть.
Это может потребовать довольно-таки значительного объема кода.

Читать дальше →

Фокус с HeadScript (сборка в один файл)

Время на прочтение8 мин
Охват и читатели3.3K
Если сделать так:
<?php $this->headScript()->appendFile('/js/my1.js');?>
<?php $this->headScript()->appendFile('/js/my2.js');?>
<?php $this->headScript()->captureStart() ?>
  var action = '<?php echo $this->baseUrl ?>';
<?php $this->headScript()->captureEnd() ?>

<?php echo $this->headScript(); ?>
<?php echo $this->magicHeadScript(); ?>


то вместо чего-то типа такого:
<script type="text/javascript" src="/js/my1.js"></script>
<script type="text/javascript" src="/js/my2.js"></script>
<script type="text/javascript">
  var action = '/123';
</script>

получим на выходе:
<script type="text/javascript" src="/cache/js/1b1004a203..._compressed.js"></script>

Читать дальше →

Zend Framework советы и трюки

Время на прочтение6 мин
Охват и читатели3.8K
Zend Framework советы и трюки

Перевод статьи Zend Framework tips and tricks.
автор: Juozas devBlog

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

Большинство рекомендаций фокусируется на легкости тестирования, легкости поддержки и других хороших практиках кодирования. Если Вы не знакомы с этими рекомендациями, советую начать читать как можно скорее. Уверен, что Вы совершаете описанные здесь ошибки и даже не подозреваете, как вы ошибаетесь. Поверьте, очень скоро Вы значительно улучшите свои навыки разработки.
Читать дальше →

Zend Framework 1.10.0 Stable Released

Время на прочтение1 мин
Охват и читатели788
Вышел очередной релиз хорошего и добротного фреймфорка для создания веб-приложений.

Из вкусного:
  • добавлены новые компоненты
  • заявлено об ускорении работы компоненты Zend_Pdf
  • переработан Zend_Loader (в том числе для поддержки новой возможности php 5.3 — работа с namespace )
  • Zend_Tool получил возможность настраивать подключения к СУБД, генерировать модели, формы и настраивать компоненту Zend_Layout
  • доработана компонента Zend_Application
  • и многое многое другое...

Кроме этого изменены страница загрузки и страница документации (теперь там можно выбирать версию фреймворка, по которой вам нужна справка)

Новость на сайте проекта

Zend_XmlRpc_Client и кросспостинг в LiveJournal

Время на прочтение5 мин
Охват и читатели2.5K
На новый год один добрый человек подарил мне домен. Если есть домен значит там что то должно быть. Решил сделать себе блог. Но так как последние года 2 я использовал livejournal я захотел чтобы мои сообщения синхронизировались с ЖЖ.
Программирую я при помощи любимого Zend Framework.
как написать пост в ЖЖ при помощи протокола xml-rpc и ZF

Cache ресурс для Zend Framework

Время на прочтение3 мин
Охват и читатели2.6K
Всем привет. Сразу хочу сказать что статья расcчитана для тех, кто уже хорошо знаком с данным фреймворком. В новых версиях Zend Framework придумана концепция инициализации компонентов приложения через плагины ресурсов. В стандартной поставке имеется достаточное их количество, но одного я так и не нашел. Таковым является кэш. Побродив по просторам Интернета и не найдя аналогов, я решил написать свой. И так, приступим.

Читать дальше →

Lazy load modules bootstrap

Время на прочтение5 мин
Охват и читатели5.3K
Многие как и я используют Modules ресурс, который позволяет использовать отдельные Bootstrap файлы для каждого модуля. Но этого ресурса есть один недостаток — он всегда загружает все Bootstrap файлы в независимости от того какое модули мы используем в конкретном запросе. Я решил предоставить решение данной проблемы
Читать дальше →

Динамические роли и права

Время на прочтение3 мин
Охват и читатели3.9K
Случилось мне давече писать динамическую систему ролей и прав для интернет-магазина.
Поскольку в интернете ничего нужного, кроме вот этой серии статей не нашел, придумал написать все сам.
Читать дальше →

Select теряет ON при JOIN'e

Время на прочтение1 мин
Охват и читатели672
Столкнулся с проблемой в ZF.
Есть две связанных таблицы. Обе наследуют Zend_Db_Table_Abstract. Формируем запрос к БД:

$select = $this->select();
$select->where(’Catalog.trashed = ?’, 1)
->where(’C.trashed = ?’, 0)
->join(array(’C’ => ‘Categories’), ‘C.id = Catalog.categoryid’, array())
->order($sort);


Смотрим запрос к БД:
SELECT `Catalog`.* FROM `Categories` AS `C` INNER JOIN `Catalog` WHERE (Catalog.trashed = 1) AND (C.trashed = 0) ORDER BY `sort` ASC

ON в JOIN потерялся.
А вот и решение:

Настройка Zend Framework 1.9.5 на Denwer 3

Время на прочтение2 мин
Охват и читатели11K
Здрасте всем! Сегодня я расскажу и покажу как поставить Zend Framework 1.9.5 на всеми известный Денвер 3. Но настройка будет не простая, а с возможностью использования zf Command Line Tool.
Ну давай попробуем...

Ближайшие события

Вышел Zend Framework 1.9.5

Время на прочтение1 мин
Охват и читатели1.2K
Очередной багфикс-релиз. Исправлено около 30 багов, большинство из которых было найдено в специально отведенные дни «охоты на баги» в текущем месяце.

Список исправлений можно посмотреть тут:
framework.zend.com/changelog/1.9.5

Качаем, как всегда, отсюда:
framework.zend.com/download/latest

Сборка Zend Framework

Время на прочтение5 мин
Охват и читатели1.9K
Для ускорения Zend Framework очень действенен такой финт: собираем все классы, которые нам нужны, в один фаил, а потом включаем eAccelerator и инклудим его в самом начале. Один фаил + еАкселератор круче, чем много фаилов.

Под катом — рассказ, как я это сделал. Это не самое умное, лучшее и красивое решение, поэтому я рад послушать ваши советы и замечания. В общем, топик этот — ради ваших советов и замечаний — тех, что по делу, а не по поводу всякой херни типа орфографических ошибок. Спасибо!

Читать дальше →

Zend Framework и магические кавычки

Время на прочтение2 мин
Охват и читатели2.7K
Zend Framework & Magic QuotesСразу стоит заметить, что с выходом php 6 эта статья будет не актуальна, а пока…

Каждый, кто имеет опыт работы с php, наверняка знает или слышал о директиве «magic_quotes_gpc»(магические кавычки). Если флаг директивы установлен в «On», то происходит автоматическое экранирование данных передаваемых в массивах $_GET, $_POST, $_COOKIE(о чём и намекает аббревиатура gpc на конце директивы).

При разработке сайта на Zend Framework'е одним из требований является отключенные «magic_quotes_gpc». Всё дело в том, что Zend Framework сам экранирует данные и при включённой директиве «magic_quotes_gpc» получается двойное экранирование, что не есть хорошо и красиво. Проблема не была бы столь острой, если бы все хостинги давали право менять значение «magic_quotes_gpc». Я уже не раз сталкивался с такой проблемой и нашёл на мой взгляд довольно элегантное решение.

Читать дальше →

Интересный подход для кэширования моделей

Время на прочтение3 мин
Охват и читатели1.8K
На днях я получил задание реализовать кэширование в моделях. В обсуждениях с коллегами родилась довольно интересная, на мой взгляд, идея, которую я бы хотел выставить на ваш суд.
Читать дальше →

небольшой хак для Zend_Db_Table_Row класса

Время на прочтение3 мин
Охват и читатели1.2K
Основной любого современного web-приложения является взаимодействие с базой данных. В случае если для реализации приложения выбран Zend Framework мы неизбежно столкнемся с использованием класса Zend_Db_Table_Abstract. Этот класс успешно реализует CRUD функции, необходимые для работы с БД, но, тем не менее, эта конструкция содержит один недостаток.
Читать дальше →

Как правильно использовать Zend_Paginator

Время на прочтение2 мин
Охват и читатели5.3K
Мой друг написал в песочнице статью, которая оказалась для меня (и не только) полезной, но через 7 дней была удалена. С его разрешения привожу её ниже. Если кому она тоже будет полезной, то он просит выслать ему инвайт на alxsad@gmail.com .

Привет всем любителям Zend Framework. Хочу расказать как правильно использовать компонент Zend_Paginator. Я очень часто видел, как плохо с ним работают некоторые программисты. Давайте посмотрим на код, представленный ниже:

$pages = new Model_Pages();
$paginator = Zend_Paginator::factory($pages->getRows());
$paginator->setItemCountPerPage(1);
$paginator->setPageRange(1);
$paginator->setCurrentPageNumber($this->getRequest()->getParam('page', 1));
Zend_Paginator::setDefaultScrollingStyle('Sliding');
$this->view->pages = $paginator;
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('paginator.phtml');
$this->view->paginator = $paginator;


* This source code was highlighted with Source Code Highlighter.


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

image

Видите? Проблема заключается в том, что люди сразу забирают ВСЕ записи из базы данных, а потом уже из них выбирают нужные. Это огромная ошибка. Поэтому читаем как это делается
правильно.
Читать дальше →

Zend Framework: стремимся к MVC для Javascript, CSS

Время на прочтение5 мин
Охват и читатели5.4K
При постепенном изучении Zend Framework и построении с его помощью базовых приложений я заметил, что клиентский js-код и инлайновые стили попадают в скрипты вида, при этом они начинают занимать почти половину всего скрипта. В принципе, ничего плохого в этом нет, но мне такая мусорка начала давить на глаза. Кроме того, инлайновый js постепенно превращается в жестко привязанную к скрипту вида конструкцию, полностью зависимую как от самого скрипта, так и от переданных контроллером данных. При всем этом не оставляет желание писать на javascript код максимально красивый при помощи библиотеки jQuery.

Итак, что в данном случае можно сделать. Первая же мысль — вынести инлайновые скрипты и стили во внешние файлы и подключать их через помощники вида headLink и headStyle. Если со стилями все примерно понятно — достаточно специфический стиль для конкретного вида вынести в css файл и подключать его по мере необходимости, то js по-прежнему зависим от данных.
Читать дальше →