Комбинацията от Magento и PHPStorm може би е доста популярна сред колегите, които се занимават с Magento, но ако сложим и Vagrant в микса, таргет зоната на този пост може би е много малка. Все пак ще изложа няколко стъпки как да вържем xdebug, за да ни помага при разследването на проблем.
Моят обичаен начин на работа е:
- Ubuntu като host операционна система
- Серия от vagrant управлявани виртуални машини (пак с ubuntu)
- PHP Storm за IDE
Първо трябва да се инсталира xdebug на виртуалната машина
sudo apt-get install php-pear
sudo apt-get install php-dev
sudo pecl install xdebug
След това отваряме php.ini за редация с вашия любим vim редактор.
Добавяме най-долу следния ред (може и да е различен при вас, затова вижте добре какво е “изплюл” инсталацията на xdebug)
zend_extension=/usr/lib/php/20131226/xdebug.so
Запишете файл и рестартирайте apache. Ако имате phpinfo файл, проверете дали xdebug разширението е видимо. Ако всичко е ОК, продължете напред. Ако не е, тук се разделяме с вас.
Пак отваряме php.ini и добавяме следните редове под този със zend_extension
xdebug.remote_enable=1
xdebug.remote_host=10.0.2.2
xdebug.remote_port=9000
Това ще зададе най-важните настройки на xdebug, а именно че е разрешен за ползване (remote_enable), ip адреса на който да търсим връзка с него, а също и port-а. Някъде тук започвайте да стискате палци да нямате firewall, който да забранява такива връзки.
Записваме и рестатираме apache. Уверете се, че съществуващите сайтове на виртуалната машина все още работят.
Следващите стъпки са вече в PHP Storm като целта е да го настроим така че да прави връзка към xdebug на vagrant машината.
Отворете проекта, който искате да debug-вате.
Изберете Run -> Edit configurations, a след това добавете нова “PHP Remote Debug” конфигурация. Кръстете я както желаете, аз обикновено избирам същото име като проекта, защото в повечето случаи на една виртуална машина имам само един проект и няма да шервам debug връзката с други проекти. Ако вие мислите да споделята връзката, то тогава е хубаво да изберете по-общо име.
След това трябва да избере сървър, което ще отвори поредния popup прозорец. Не се плашете. Въведете име на сървъра и същите IP и PORT, който по-рано записахме в xdebug конфигурацията в php.ini. На мен ми отне повече време, отколкото съм готов да споделя, докато разбера че IP-то е на xdebug сесията, а не на виртуалната машина.
Изберете mapping-а между файловете на хост машината и тези на сървъра. Реално, ако използвате vagrant и shared volumes, файловете са едни и същи, но в контекста PHP Storm, за него са различни.
File/Directory би трябвало да е попълнено по подразбиране, като само в “Absolute path on the server” има нужда от попълване. Попълнете пълния път до проекта на виртуалната машина. Би трябвало да е нещо като “/var/www/html” или “/var/www/vhosts/some-site.com”. Натиснете ENTER, за да се запише. Звучи малоумно, но не е толкова интуитивно и няколко пъти php storm ми изтрива стойността.
Това е конфигурацията на сървъра на debug конфигурацията. Натискате OK, за да запишете. Би трябвало да се окажете на предния popup. Въведете session_name за име на Ide key (session id). Това е необходимо,за да може да пускате и спирате debug сесията през browser-а. OK, OK, save.
(Пред)Последно!
Ако за първи път правите връзка между PHP Storm и PHP Remote Debug, трябва да кажете на PHP Storm да “слуша” за debug връзка като цяло. Това става от File -> Settings -> Language & Frameworks > PHP -> Debug. В десния панел трябва да има секция “Pre-configuration”, в която точка 3 трябва цъкнете на “Start listening”. ОК.
Ииии последно!
Трябва да си добавите разширение за Chrome, с което да пускате и спирате xdebug сесията от страна на browser-а. Това става посредством Xdebug helper. Ако не ми вярвате, че не е refaral, просто го потърсете в магазина на chrome. Инсталирате го и ще се появи една хлебарка в горния десен ъгъл. Не я пръскайте с Raid, че може да си повредите екрана. Отворете сайта, който искате да debug-вате и след това изберете сивата хлебарка и от нея цъкенете debug.
Ако все още не сте се отказали, вече е време за debug-ване.
За да валидирате, че всичко ви е ОК, намерете функция, която знаете че на 100% ще се извика при refresh на страницата. В index.php или в някой controller. В случая на Magento, може да отворите app/code/Mage/Catalog/controllers/ProductController.php и viewAction метода.
Цъкате с левия бутон на toolbar, където са номерата на редовете и срещу дефиницията на $categoryId. Ще се появи една червена точка. Казва се breakpoint.
Отворете която и да било продуктова страница в Magento.
Magic!
Това е 🙂 Няма да продължавам с обяснение как се debug-ва, защото и аз толкова знам. Ако искате да спрете debug сесията, натиснете зеления триъгълник и премахнете breakpoint-а като го натиснете, все едно е хлебарката.