Saturday, July 28, 2012

PHP для бабушек. Ставим Symfony.


Что такое Symfony? 
Клевый ответ на этот вопрос на сайте разработчиков: "Symfony - это PHP Web Development framework. Что тут неясно? А если неясно, то проще считай, что это религия!" (framework + philosophy+comunity)
Не веришь? Можешь сам перевести отсюда http://symfony.com/what-is-symfony :)

Попробую пройти "обряд крещения". Как обычно расписано по шагам для старичков с хреновой памятью типа меня :)
Вот инструкция по установке и использованию. Я просто следовал ей.

Я проделывал это на двух компах, у которых путь установки проекта отличается именем замапленного диска. Отсюда и разные пути в тексте и скриншотах.

1. Установка

Модный способ - через композер. Как поставить композер, описано здесь.
В рутовой папке проекта (у меня это w:\home\calculator\www) запустить такое  (я запускал из гитового баша как обычно):

php composer.phar create-project symfony/framework-standard-edition Symfony/

Нифига не заработало на домашнем компе, но заработало на рабочем. Поэтому следующий вариант такой:

Скачиваю отсюда http://symfony.com/download Symfony Standart и распаковываю в рутовую папку. В руте у меня появится папка Symfony
w\
|-calculator
  |-www
    |-Symfony



Запускаю в папочке w:\calculator\www\Symfony (с баш строки как обычно)
php bin/vendors install

далее идет непериводимая игра слов выдаваемых скриптом и гитом.
Появилась папочка vendor. Сюда Symfony понапихивало массу полезностей.
Все эти полезности описаны в файлике Symfony\deps. На 11м слайде презенташки можно увидеть как он выглядит.

Проверяю. Открываю в браузере * http://www.calculator/Symfony/web/config.php. Вижу страничку конфига.
* www.calculator я добавил в файл Windows\System32\drivers\etc\hosts. Подробнее здесь.


Тут он мне предлагает поделать всякие усовершенствования типа поставить акселератор, что-то поменять в php.ini. Естественно забиваю на эти сообщения - они мне жить пока не мешают.



2. Создаю свое приложение.

Тут я перепрыгнул на слайд 32. Сначала хочу создать приложение, а потом залить его в git.

Создаю бандл
в папке Symfony запускаю php app/console generate:bundle

Ввожу имя нейпспейса (Tdd/CalculatorBundle) и имя бандла (Calculator).

Дальше куча вопросов, на которые просто жимаю <Enter>

Бандл - это директория со всем, что нужно для фичи. Вот такое мне сгенерилось:


3. Смотрим на тесты

Генератор бандлов также создал папку с тестами

В ней находится один тест на контроллер

Запустить этот тест вместе со сьютом можно из корневой папки Symfony. Запускаю команду
phpunit -c app/
 параметр -c указывает конфигурационный файл для phpunit.

Почему надо запускать тесты с опцией -c?
Тест на контроллер создает и запускает симфонийский кернел со всеми зависимостями. В файле app/phpunit.xml.dist есть ссылка на bootstrap, который делает предварительную инициализацию окружения. 


Настройки Netbeans для запуска тестов
Чтобы мои тесты запускались прямо в Netbeans я сделал следующее:
- Указал где лежат тесты (окно Project properties, пункт Sources)

- Выбрал phpunit.xml.dist в качестеве XML Configuration для тестов (окно Project properties, пункт PHPUnit)

Теперь мои тесты запускаются также из ИДЕ:


Tuesday, July 24, 2012

Composer - это Maven для PHP?

Вот обнаружил, что на ПХП не так уж все и печально с менеджментом зависимостей. В PHP мире, оказывается существует замечательная штука - Composer.
Вот, например, список пакетов, доступных для скачивания композером  http://packagist.org/packages/. И это только репозиторий композера по умолчанию! Кстати, то что джависты называют репозиторием мавена, в композере называется Packagist.
Composer также позволяет скачивать зависимости из VCS (естественно, что git/github чаще всех встречается в качестве репозиториев PHPшных модулей).

Короче, просмотрев "по диагонали" доку (http://getcomposer.org/doc/) у меня начало развиваться чувство неполноценности мавена, как основного средства менеджмента зависимостей на моих Java проектах :). Вариантов хранения зависимостей - тьма! Можно хранить в VCS, можно в зип архиве на http server'e, также поддерживаются репозитории глобального менеджера зависимостей (PEAR). А хочешь - ставь свой репозиторий и работай с ним. Код packagist'a доступен для всеобщего доступа https://github.com/composer/packagist .

"Хочу купить!" - так сказала бы моя жена, увидев красивую вещь, которая ей очень нужна. И я повторю ее фразу в отношении composer'a.

Итак, приступил к покупке Composer'a :)
Доку как обычно читать буду потом, сразу ставлю:

1. В гитовом баш окне перехожу в Z:\usr\local\php5 (эта папка должна быть доступна по путям)


2. Запускаю такую следующую команду. Как поставить curl можно нагуглить если что.
curl -s http://getcomposer.org/installer | php

3. Для того, чтобы композер запускался из командной строки windows создаю батник composer.bat в z:\usr\local\bin с таким содержимым
php z:\usr\local\php5\composer.phar %*


4. composer.phar уже есть исполняемый файл для баша. Если в баш окне попробовать выполнить composer.phar help, то должно выдаться окно с хелпом


5. Такое же самое окошко с хелпом должно вывестись, если запускать из командной строки windows команду  composer help

Ну поставил, и че теперь?
Теперь я хочу добавить фреймворк Symfony2 в свой проект. Сам этот фреймворк лежит на  http://packagist.org/. Его зависимости разбросаны по всей сети.

1. Создаю новый проект в папке w:\home. Использую свою любимую ИДЕ для этого.

2. В корне проекта создаю файлик composer.json с вот таким содержимым:

То есть я указал, что хочу версию php не ниже 5.3.0 и версию symfony 2.0.16.

3. Инсталлирую зависимости в свой проект. В гитовом окне запускаю
composer.phar install
В моем проекте появилась папка vendor. В нее композер аккуратненько сложил все необходимые зависимости и что самое интересное - сгенерировал скрипт autoload.php.

4. Как использовать зависимости?
В папочке с пхп скриптами (у меня это w:\home\calculator\www) создаю файлик index.php с таким содержимым:
Request - это абстракция реквеста в Symfony. Что-то подобное классу HttpServletReqest из мира джавы.

5. Открываю браузер на страничке http://www.calculator/index.php
Работает. Могу дальше колбасить код :)

Composer позволяет не только устанавливать зависимые модули, но и создавать свои проекты и выкладывать их куда душа захочет (об этом подробнее позже). С помощью него можно так же добавить зависимость на любой проект, который изначально не использовал Composer.
Вот еще классная статья на хабре http://habrahabr.ru/post/145946/

Friday, July 20, 2012

Ставим Pear руками


Хотел поставить Pear по своей инструкции, но в последнем расширении Денвера почему-то нет go-phear.bat. Поэтому пришлось искать альтернативные варианты поиска

1. Скачал go-pear.phar в папку W:\usr\local\php5\PEAR
curl http://pear.php.net/go-pear.phar > go-pear.phar


2. В папке W:\usr\local\php5\PEAR запускаю командуphp -d phar.require_hash=0 go-pear.phar


3. Дальше жму везде ENTER. Много сообщений о том, что что-то инсталлится

4. Потом спросило не хочу ли я проапдейтить php.ini <Y>

5. Установщик подготовил файлик PEARPEAR_ENV.reg, который я внес в реестр

6. Но путь к PEAR все равно пришлось прописать в переменной окружения Path

PhpStorm. Настраиваем IDE и Debug


Недавно нас с Сашей попросили провести тренинг по ТДД на PHP. Следовательно, возникла необходимость срочно ознакомиться с PHP, попробовать разные фреймворки для юнит тестов, моки и т.д. В общем, поделать что-то. Netbeans – классная ИДЕ для ПХП, но я уверен, что PHPStorm лучше и я разберусь с пхп быстрее в нем, хоть он и платный. А evaluation периода мне хватит, т.к. тренинг через 3 недели J

С установкой проблем никаких. Идем сюда https://www.jetbrains.com/phpstorm/download/, скачиваем и ставим.

Чтобы не париться я поставил Денвер. Как это делается, я уже описывал в этом посте.

Не помню откуда я взял это, но здесь https://github.com/DragonBe/zftest  чувак выложил тестовое приложение на пхп с примерами юнит тестов. То, что надо. Клонирую репозиторий git отсюда git://github.com/DragonBe/zftest.git в папочку D:\workspace\projects\php\zftest.

В PhpStorm создаю новый проект

Дальше нужно сказать IDE где установлен PHP. В окне настроек PHP (File->Settings->PHP) ввожу такой путь к PHP : W:\usr\local\php5. W - диск, на который замаунтил денвер.

Немного паники вызвала ошибка "PHP Startup: Unable to load dynamic library", которая вываливалась несколько раз. Но пофиксилось просто:

Открываем файлик php.ini в W:\usr\local\php5 и находим строчку, где указывается extension_dir. У меня она выглядела вот так:

Поменял на нормальный виндовый путь:

И нажал кнопочку "Reload" в настройках PHP.

Дальше попробовал запустить юнит тесты

И получил такой результат:

О том, как поставить PHPUnit я уже писал здесь

А проблему с дебагом пофиксил таким же способом, как и проблему загрузки dll-ек при конфигурации проекта. Т.е. открыл файлик php.ini, нашел настройки xdebug:

и изменил путь на вменяемый:

Monday, July 09, 2012

Выбираю IDE для PHP или Netbeans не так уж и мертв.

Я верю, что самая классная IDE – это PHPStorm. Потому что эта та же IntelliJ IDEA, только для PHP. Но поскольку эта IDE платная, а методы бесплатного ее использования я публиковать не хочу, то я остановился на NetBeans.


Установка и настройка проекта на PHP в NetBeans 7.1

  1. Идем сюда http://netbeans.org/downloads/index.html, выбираем столбик с PHP и качаем
  2. Создаем новый проект (File->New Project).

    Напомню, что структура проекта такая:
    spairing
    |-www
    |-tests
  3. Указываем Source folder (z:\home\spairing)
  4. В Run Configuration меняем Project URL (http://www.spairing) и указываем Index file (www/index.php)
  5. Открываем File->Project properties, устанавливаем Web Root (www). Значок возле каталога www поменялся

    Значок возле каталога www должен поменяться
     
  6. Теперь можем запустить index.php, правой кнопкой мыши на файле и выбрать Run. Запустится браузер, в нем откроется страничка.
  7. Укажем путь где будут лежать юнит тесты
  8. Создам новый класс Profile.
  9. Теперь правой кнопкой мыши на папке Source folder и сгенерим юнит тесты:
  10. По идее в тестовых сорцах должен создаться юнит тест ProfileTest
  11. В сгенерированном тесте ProfileTest добавлю тест
  12. И запущу тесты (если с клавиатуры, то <Alt>+F6)

    Теперь можно начинать колбасить тесты и код.
  13. Ради интереса запущу этот тест из командной строки (команда phpunit ProfileTest.php из директории с тестовым файлом)

Можно начинать колбасить код! :)

Устанавливаем PHPUnit

Инструкция по установке PHPUnit взята отсюда: http://www.phpunit.de/manual/3.0/en/installation.html

Напомню, что все эти операции я проводил на Denwer с версией пхп 5.3.3. Корневая папочка  Денвера замаплена на диск Z:

Итак, чтобы поставить PHPUnit нужно

  1. Убедиться, что установлен Pear. Как его устанавливать я описывал здесь.
  2. Добавить channel, откуда будет установлен пакет PHPUnit:
    pear channel-discover pear.phpunit.de
  3. Добавить channel pear.symfony-project.com (нужен для зависимых модулей)
  4. Собственно, установить PHPUnit командой
    pear install phpunit/PHPUnit
    На ошибку загрузки опциональных зависимостей забиваем.
Дальше буду определяться с IDE и в ней уже создам пару тестов...

Устанавливаем PEAR

Дословный перевод определения PEAR, взятого отсюда http://pear.php.net определения что такое PEAR:
PEAR - это фреймворк и система распределения реюзабельных PHP компонент (PEAR is a framework and distribution system for reusable PHP components)
Pear - это как Setuptools или PIP в питоне.

Ставлю Pear


    1. Поскольку у меня Денвер, то сначала я скачал пакет расширений отсюда  http://www.denwer.ru/packages/php5.html и установил его. 
    2. Этот файл http://pear.php.net/go-pear.phar скачиваем в папку Z:\usr\local\php5\PEAR. Z - это диск, на который я замапил установленную дистрибуцию денвера (см. предидущий пост по установке)

    3. В папке с инсталляцией php запускаем go-pear.bat, на все вопросы жмем Enter.Если нету go-pear.bat, то здесь описан вариант установки руками:  http://szelenin.blogspot.com/2012/07/pear_20.html
    4. На дурацкий вопрос отвечаем Y и подтверждаем еще раз <Enter 5. Все, pear установлен. Следуя рекомендациям внесем изменения в реестр из сгенерированного файла: 6. У меня внести не получилось, поэтому все переменные из z:\usr\local\php5\PEAR_ENV.reg я внес руками.

    Проверь правильность установки, это ВАЖНО:

      7. PHP_PEAR_PHP_BIN должна содержать полный путь к исполняемому php файлу, то есть к Z:\usr\local\php5\php.exe
       
      8. Директорию Z:\usr\local\php5 нужно добавить в переменную окружения PATH.

Проверка правильности установки Pear


Переходим на диск Z: и запускаем команду pear version. Если видим нечто подобное, значит pear возможно все-таки установлен. 
Чтобы полностью убедиться в правильности устнановки можно выполнить инструкции, описанные здесь
http://pear.php.net/manual/en/installation.checking.php