
З моменту виходу Symfony 2.0 процес встановлення та інструменти, необхідні для цього, неодноразово змінювались та оновлювались. У цій статті ми розповімо, як встановити та налаштувати застосунок Symfony2.
На даний момент основним інструментом для створення нового застосунку Symfony 2 є командний рядок з однойменною назвою. На Linux або Mac OX його можна встановити з консолі:
$ sudo curl -LsS http://symfony.com/installer -o/usr/local/bin/symfony $ sudochmod a+x /usr/local/bin/symfony
Єдина обов'язкова умова для цього утиліти — версія PHP 5.4 і вище. Якщо ви все ще використовуєте PHP 5.3, у статті ви знайдете другий варіант, як встановити та налаштувати Symfony2.
Symfony
командний рядок має кілька доступних команд виконання. Щоб побачити список доступних команд, напишіть наступне:
$ symfony list
Ось список доступних команд:
about
demo
help
list
new
self-update
selfupdate
Команда symfony about
показує інформацію про поточну версію установника, і, до речі, ту ж інформацію можна знайти, запустивши параметри утиліти symfony
. Установник Symfony регулярно оновлюється, і нові версії часто випускаються. Після того, як ви встановите Symfony2 глобально, ви можете оновити його за допомогою команди self-update
або selfupdate
(на основі Composer).
$ symfony self-update $ symfony selfupdate
Рекомендується оновлювати його час від часу або робити оновлення безпосередньо перед використанням командного рядка. Якщо вам потрібна додаткова інформація щодо використання будь-якої командної команди, ви повинні використовувати команду help
або опцію --help
.
$ symfony help demo $ symfony demo --help
Symfony спрощує оптимізацію та запуск демонстраційного застосунку (необхідна версія PHP вище 5.4). Для цього виконайте наступні команди:
$ symfony demo new_directory_name $ cd new_directory_name/ $ app/console server:run
Далі відкрийте веб-сторінку http://localhost:8000 у вашому браузері. Для вас доступний простий блог з фронтенд- та бекенд-частинами. І, звичайно, є робочий приклад коду, який ви можете вивчити, дослідити та використовувати.
Встановлення Symfony за допомогою базового установника
Щоб створити новий застосунок, використовуйте команду new
. Синтаксис команди такий:
$ symfony new directory_name [version]
Назва каталогу є обов'язковою, версія — необов'язковою. Ось приклад можливих способів виконання команди:
# Щоб створити проект на основі найновішої стабільної версії Symfony. $ symfony new my_project_name # Якщо ви вкажете версію, з'явиться останнє стабільне випуск цієї версії. $ symfony new my_project_name 2.3 $ symfony new my_project_name 2.5 $ symfony new my_project_name 2.6# Можна використовувати конкретну версію Symfony. $ symfony new my_project_name 2.3.26 $ symfony new my_project_name 2.6.5 # Також можна використовувати останню LTS версію, наразі це 2.7 $ symfony new my_project_name lts
Тепер вам слід відкрити файл з параметрами конфігурації Symfony2 my_project_name/app/config/parameters.yml
і внести необхідні зміни в налаштування застосунку.
Створення застосунків без Symfony Installer
До винаходу Symfony Installer проекти створювалися за допомогою альтернативного методу установки на основі Composer. Ви можете використовувати цей метод, якщо вам зручно, але якщо у вас PHP 5.3, на жаль, це єдиний метод, який ви можете використовувати. Спочатку встановіть Composer глобально. Створення застосунків Symfony на основі останньої стабільної версії виконується наступним чином:
$ composer create-project symfony/framework-standard-edition my_project_name
Або, якщо вам потрібно створити застосунок на основі конкретної версії Symfony:
$ composer create-project symfony/framework-standard-edition my_project_name "2.7.*"
Недолік цього методу полягає в тому, що він не визначає "Його" як версію, і вам потрібно використовувати цифри для її вказівки.
Після виконання цієї команди новий шаблон проекту та всі необхідні залежності завантажуються. Тепер вам потрібно ввести параметри змінних для файлу parameters.yml
з консолі в інтерактивному режимі.
Вбудований веб-сервер
Починаючи з PHP 5.4, з'явився вбудований веб-сервер. Його можна використовувати для запуску застосунку Symfony без додаткових налаштувань. Це робиться за допомогою консолі Symfony, яка надає 4 команди для роботи з веб-сервером:
$ php app/console server:run $ php app/console server:start $ php app/console server:stop $ php app/console server:status
Різниця між server:run
і server:start
полягає в тому, що перша команда залишиться в консолі після виконання, і ви можете зупинити сервер, лише використовуючи Ctrl+C. Друга запускає веб-сервер у фоновому режимі, і для його зупинки потрібно виконати server:stop
.
За замовчуванням веб-сервер запускає вибраний застосунок за адресою http://127.0.0.1:8000/
Якщо у вас є кілька локальних проектів Symfony, ви можете запускати їх, використовуючи різні порти.
$ app/console server:run 127.0.0.1:8000 $ app/console server:run 127.0.0.1:8001 $ app/console server:run 127.0.0.1:8002
Читати більше про вбудований веб-сервер на сайті PHP. Якщо ви використовуєте Apache або nginx для розробки, вам потрібно налаштувати віртуальні хости для локальної розробки. Ви повинні враховувати, що вбудований веб-сервер використовується лише для розробки і не призначений для використання в продуктивному режимі.
Налаштування Symfony
Фреймворк постачається з візуальним тестером конфігурації, який доступний за адресою http://localhost:8000/config.php. Він перевіряє наявність усіх необхідних параметрів для запуску додатку та дозволяє заповнювати або змінювати значення конфігурації Symfony2 через веб-інтерфейс. Чесно кажучи, я ніколи не заповнюю конфігурацію через веб-інтерфейс, я вважаю за краще редагувати файл безпосередньо.
Ви також можете перевірити системну конфігурацію для Symfony за допомогою консольного скрипта:
$ php app/check.php
Цей скрипт перевіряє наявність усіх системних вимог для Symfony і, якщо щось відсутнє, попереджає вас і вказує, що робити. Наприклад, може бути відсутній деякий PHP-розширення, необхідне для Symfony, або потрібний параметр може бути відсутній. Консольна версія PHP може мати іншу конфігурацію, ніж веб-версія. Також є команда Symfony для перевірки безпеки вашого додатку:
$ app/console security:check
Ця команда перевіряє залежності у файлі composer.lock. Якщо ви використовуєте вразливу версію постачальника, скрипт повідомить вас про це. База даних небезпечних постачальників підтримується SensioLabs і доступна за адресою https://security.sensiolabs.org/database.
Права доступу до директорій
Папки Symfony app/cache
та app/logs
повинні мати права доступу для веб-сервера та для користувача командного рядка. Існує кілька способів це зробити.
Використання одного й того ж користувача для веб-сервера та консолі
Для цього вам потрібно редагувати конфігурацію веб-сервера і встановити його користувача таким же, як ваш користувач консолі. Наприклад, для Apache ви використовуєте файл httpd.conf
(або apache2.conf
).
Використання ACL на системі, що підтримує chmod +a
$ rm-rf app/cache/* $ rm-rf app/logs/* $ HTTPDUSER=`ps aux |grep-E'[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx'|grep-v root |head-1|cut -d\ -f1` $ sudochmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs $ sudochmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
Якщо ви отримали помилку — спробуйте наступне рішення.
Використання ACL на системі, що не підтримує chmod+a
$ HTTPDUSER=`ps aux |grep-E'[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx'|grep-v root |head-1|cut -d\ -f1` $ sudo setfacl -R-m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs $ sudo setfacl -dR-m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
Якщо це не спрацює, спробуйте додати опцію -n
.
Без використання ACL
Якщо жодне з попередніх рішень вам не підходить, змініть umask
, щоб директорії cache
та log
були доступні для запису групі або для всіх (це залежить від того, чи є користувачі веб-сервісу та командного рядка в одній групі). Для цього додайте наступний рядок на початку файлів app/console
, web/app.php
та web/app_dev.php
:
umask(0002); // Це дозволить права доступу 0775 // або umask(0000); // Це дозволить права доступу 0777
Розповсюдження Symfony
Приклади, описані вище, використовують дистрибутив під назвою Symfony Standard Edition. Він включає повнофункціональний каркас Symfony-застосунку та composer.json з усіма необхідними стандартними конфігураціями. Цей дистрибутив є найпопулярнішим і є найкращим вибором для створення нового застосунку. Існують також інші дистрибутиви:
- Symfony CMF Standard Edition - це кастомний дистрибутив на основі Symfony CMF, який спрощує додавання CMS функціональності до вашого проекту.
- Symfony REST Edition - це дистрибутив, який допомагає організувати RESTful API сервер на основі Symfony та FOSRestBundle.
Symfony та його компоненти постійно оновлюються. Ви можете використовувати цю команду для оновлення вашого проекту:
$ composer update
Ви не повинні стикатися з жодними проблемами з кодом, якщо використовуєте останню версію. Щоб запустити останню версію (наприклад, з 2.* на 3.0), вам слід ознайомитися з усіма необхідними специфікаціями. Якщо якийсь пакет буде залежати від конкретної версії Symfony, Composer попередить вас і не працюватиме, поки проблема не буде вирішена.
Щоб бути в курсі всіх оновлень і змін, слідкуйте за офіційним блогом Symfony.
Ви можете ознайомитися з усіма специфікаціями оновлень версій у Git репозиторії, папка UPDATE..
Інші поради щодо роботи над новим Symfony-застосунком
Якщо ви завершили всі вимоги до встановлення Symfony і вже маєте основу вашого застосунку, ви можете заповнити його бізнес-логікою та розширити, використовуючи різні пакети. Якщо ви початківець, то вам обов'язково слід скористатися документацією Symfony2 з офіційного веб-сайту. Ознайомтеся також з CookBook.
Я вношу деякі додаткові корективи після створення нового проекту. Я виправив конфігурацію PHPUnit та видалив деякі каталоги і файли, які не підлягають тестуванню, наприклад, класи фікстур (якщо ви цього не зробите, вони вплинуть на покриття тестами). Якщо проект доступний на GitHub як проект з відкритим кодом, я підключаю його до сервісів контролю якості коду. Існує також сервіс Insight від SensioLabs, про який я писав у цій статті. Як експеримент, я вирішив перевірити чистий Symfony Standard Edition, щоб дізнатися, що він виявляє у вихідному коді Symfony. Я створив чистий новий Symfony проект за допомогою команди:
$ symfony new test
Поточна версія була 2.7.1. Після цього, не вносячи жодних змін, я надіслав свій проект до Git репозиторію і зробив перевірку за допомогою SensioLabs Insight. І ось результат.
Були виявлені помилки, давайте проаналізуємо їх.
Безумовно, вам потрібно зареєструвати свою фразу-пароль. Але в даному випадку це марно. Ви можете просто змінити значення за замовчуванням, яке буде використовуватися, коли хтось відкриє ваш додаток з коробки. Це не означає, що те ж саме значення буде використовуватися на виробничому сервері. Однак, щоб усунути це попередження, вам слід замінити стандартну фразу-пароль ThisTokenIsNotSoSecretChangeIt
на свою власну фразу-пароль.
Symfony отримав недійсний composer.json, оскільки відсутнє поле опису, яке є обов'язковим.
Також config.php не видалено, він використовується для перевірки параметрів конфігурації веб-середовища Symfony. Insight радить вам видалити закоментований та невикористаний код. Ще одна порада — змінити назву кукі для PHP-сесії, її можна вказати у файлі config.yml в полі framework.session.name.
Інформаційні повідомлення виглядають наступним чином. Insight радить вам видалити всі файли htaccess, встановити всі необхідні параметри в глобальних конфігураціях веб-сервера. Також рекомендується налаштувати сторінки помилок 404 та 500. Рекомендується вказати підтримувані методи для кожної дії (маршруту) в контролері, використовуючи анотації. І не забудьте змінити значок за замовчуванням.
Це поради, які нам надав робот. Деякі з них є спірними, але якщо вони існують, це означає, що хтось витратив час, щоб додати їх до бази. У будь-якому випадку, вони не зашкодять.