Показаны сообщения с ярлыком PHP. Показать все сообщения
Показаны сообщения с ярлыком PHP. Показать все сообщения

понедельник, сентября 6

Zend Studio и поддержка Ant-скриптов. Продолжение

Как выясняется, мало включить поддержку Ant, так надо ещё и JVM поменять для выполнения Ant-скриптов, чтобы не получать UnsupportedClassVersionError.

По-умолчанию Zend Studio (проверял на 7.2.1) использует JRE 1.5.0_08 и при при запуске Ant-скриптов на задачах, связанных с SSH, получаем UnsupportedClassVersionError
Решается очень просто:

1) Включается поддержка Java
1.1) Открываем диалог создания нового проекта "File > New > Other..."
1.2) В диалоге ставим галочку на "Show All Wizards", если она не стоит (у меня так её и вовсе уже почему-то нет) и жмём Next
1.3) в диалоге "Confirm Enablement" нажимаем "OK", чтобы включить поддержку Java
1.4) Закрываем диалог создания проекта
2) В настройках в разделе "Java > Installed JREs" добавляем путь до нужной нам версии JRE и ставим возле неё галочку

ЗЫ: перезагружать Zend Studio не обязательно
ЗЫЫ: пробовал поменять VM для Zend Studio на 1.6, но IDE начала зависать на некоторых диалогах, да и для ant-скриптов всё равно использовала свою JRE, а не указанную через ZendStudio.ini





Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

Zend Studio и поддержка Ant-скриптов

Собственно, в интернете достаточно (если покопаться) написано про то, как включить поддержку Ant в Zend Studio.

Мною найден ещё один способ - использование ant БЕЗ включения :) извращение, но имеет право на жизнь. подкатом описаны оба способа.

1-й способ: "без включения" поддержки Ant.
Особенность заключается в том, что ant-скрипты всё равно РАБОТАЮТ даже при выключенной поддержке :) и, если вам не понадобится расширять ant своими или сторонними библиотеками (такими например, как поддержка ssh), то этого вполне достаточно.

Открываем справку через "Help > Help contents" и открываем раздел "Ant view" как указано на картинке ниже. В открывшемся разделе кликаем по ссылке выделенной на картинке красной линией. вуаля - мы имеем представления, в которое можно добавлять ant-скрипты и выполнять их.
Да, чтобы представление полностью заработало (появились кнопки), потребуется перезапустить Zend Studio.



Способ рабочий, но из категории "так делать не надо" - правильнее будет включить полноценную поддержку ant-разработки, о чём я напишу во-втором способе:

2-й способ: с включением поддержки Ant (знания подчерпнуты на просторах интернета)
1) Меню "File > New > Other..."
2) Кликаем по "Show All Wizards", чтобы увидеть скрытые мастера, а в частности, раздел Java
3) Выбираем "Java Project from Existing Ant buildfile" и жмём "Next"
4) в диалоге "Confirm Enablement" нажимаем "OK", чтобы включить поддержку Ant
5) Закрываем диалог создания нового проекта
6) Перезапускаем Zend Studio







Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

понедельник, августа 30

Zend Framework XML-конфиг и константы

В предыдущем посту я написал про то, как легко перейти с INI-конфигурации на XML-конфигурацию. В использовании оной есть как плюсы, так и минусы.

из плюсов, как минимум то, что не приходится писать кучу повторяемых "веток" вида "resources.frontController" - мы пишем простое XML-дерево.
из минусов:
1) чтение XML-конфигурации несколько дольше (по тестам, что нашёл - ~0,15 сек). но есть подозрение, что ещё быстрее, чем ini-файл будет подсовывание напрямую массива как конфигурации
2) При автоматическом форматировании XML в редакторах, значения с zf-константами форматируются "криво" - переносятся на новые строки.

Решением проблемы (2) мы и займёмся.
Для начала скажу, что для разработки я использую Eclipse, а для загрузки файлов на сервер - ant-скрипт, который делает предварительную сборку файлов перед загрузкой на сервер. В нём же производятся некоторые действия над файлами, одно из которых я приведу ниже.

Определим правило, что константы вместо "<zf:const zf:name="константа">" в xml-конфиге будем описывать как "%ZF.константа%". для замены содержимого в файле, воспользуемся task-ом replaceregexp, выглядящий следущим образом:

<replaceregexp flags="g">
 <!-- заменяем "%ZF.константа%" на "<zf:const zf:name="константа" />" -->
 <regexp pattern="%ZF.(.*)%" />
 <substitution expression="&lt;zf:const zf:name=&quot;\1&quot; /&gt;" />
 <fileset dir="${target}/application/configs" includes="**/*.xml" />
</replaceregexp>

собственно на этом всё. :)
Итого: на этапе разработки мы получаем удобный XML, без "лишних" тегов, а на сервере правильный xml-конфиг с понятными для ZF константами

Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

Zend Framework и XML конфиг вместо INI

Делается всё просто как на 1-2-3:

1) открываем файл public/index.php
2) после строки "require_once 'Zend/Application.php';" дописываем строку "require_once 'Zend/Config/Xml.php';"
3) вместо
$application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
пишем строки:
$cfg = new Zend_Config_Xml(APPLICATION_PATH . '/configs/application.xml', APPLICATION_ENV);
$application = new Zend_Application(APPLICATION_ENV, $cfg->toArray());
4) сохраняем изменения

да, и не забываем создать xml-файл конфигурации вместо ini-файла ;)


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

воскресенье, апреля 26

PHP __autoload

Попалась тут задачка...
есть несколько вариантов написания библиотек с классами... почему так? потому что разные источники и у каждого свои исторически сложившиеся наименования...

В частности их было 3:
1) ClassName.class.php
2) ClassName.php
3) class/ClassName.php

где ClassName - имя вызываемого класса.

естественно, что решение с простым использованием include/require в функции __autoload в данном случае не подходил.

в итоге пришёл вот к такому коду:

function __autoload($className){
if (is_file('class/' . $className . '.php')) {
include_once ('class/' . $className . '.php');
} elseif (is_file($className . '.class.php')) {
include_once ($className . '.class.php');
} elseif (is_file($className . '.php')) {
include_once ($className . '.php');
} else {
throw new ErrorException('Не удаётся закрузить класс "' . $className . '"');
}
}