Symfony 2 Joboard : Начинаем проект

В каждой главе, в приложение будут добавляться новые функции и мы будем использовать такой подход для постепенного введения в Symfony фреймворк, а также узнаем о передовом опыте в веб-разработке на Symfony.

В этой части, вы не будете писать код. Вместо этого вы будете настраивать рабочую среду разработки.

Настройка рабочей среды разработки

Прежде всего вам нужно проверить, что ваш компьютер имеет соотвествующее программное обеспечение для веб-разработки. В качестве операционной системы мы будем использовать Ubuntu 12. Из ПО как минимум нам потребуется веб-сервер Apache, СУБД MySQL и PHP 5.3.3 или более поздней версии. Для Windows рекомендую установить XAMPP или OpenServer, там есть все библиотеки и уже настроено окружение для разработчика. Также вместо сервера Apache вы можете использовать встроенный сервер в php 5.4 и выше, как это сделать буде тпоказано ниже.

Установка Apache, в качестве основного веб-сервера

Перейдите в терминал и введите:

sudo apt-get install apache2

затем включите модуль Apache mod-rewrite:

sudo a2enmod rewrite

Установка MySQL сервера

sudo apt-get install mysql-server mysql-client

Установка PHP

sudo apt-get install php5 libapache2-mod-php5 php5-mysql

Установка расширения Intl:

sudo apt-get install php5-intl

Теперь вам нужно перезапустить службу Apache:

sudo service apache2 restart

Устанавливаем Symfony 2

Первое, что нужно сделать - это подготовить каталог для веб-сервера, где вы хотите установить новый проект. Назовем его joboard: /var/www/joboard (каталог не создавайте).

Для того, чтобы загрузить последнюю версию Symfony2 в этот каталог, нам необходимо установить менеджер пакетов для PHP - Composer. Сам фреймворк и все необходимые дл я него библиотеки будут загружены автоматически через эту утилиту.

Composer — менеджер зависимостей сторонних библиотек для PHP, который также можно использовать и для загрузки Symfony 2 Standard Edition.

Теперь давайте установим Composer, выполнив команду:

php -r "readfile('https://getcomposer.org/installer');" | php
mv composer.phar /usr/local/bin/composer

или если по какой-то причине она у вас не сработала, то можно установить вот так:

curl -s https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

А теперь сама установка Symfony2 Standart Edition (нужно перейти в каталог /var/www/):

cd /var/www/
composer create-project symfony/framework-standard-edition joboard "2.5.*"

В процессе установки вам нужно будет ответит на несколько вопросов, просто нажимайте всё время Enter.

Конфигурация веб-сервера

Втроенный сервер PHP

Вы можете запустить проект на симфони, без настройки виртуального хоста, чтобы это сделать перейдите в каталог web вашего проекта и запустите встроенный локальный сервер в PHP: php -S localhost:8000, затем перейдите по ссылке http://localhost:8000

Второй и более простой способ, перейти в корневой каталог проекта и запустить команду, которая запустит точно такой же сервер, только вам не нужно будет указывать в адресной строке app_dev.php:

php app/console server:run

Хорошая практика в веб-разработке это помещать в корневом каталоге web только те файлы, которые должны быть доступны в веб-браузере, это могут быть: стили, JavaScript файлы или картинки. По умолчанию, рекомендуется хранить эти файлы в подкаталоге web symfony проекта.

Чтобы настроить Apache для вашего нового проекта, создайте виртуальный хост. Чтобы сделать это, перейдите в ваш терминал и введите следующую команду:

sudo nano /etc/apache2/sites-available/joboard.local.conf

Теперь у нас есть файл с именем joboard.local. Вставьте описание виртуального хоста (смотрите ниже) внутрь созданного файла, а затем нажмите CTRL + O и Enter, чтобы сохранить его, а затем CTRL + X для выхода из редактора.

<VirtualHost *:80>
    ServerName joboard.local
    DocumentRoot /var/www/joboard/web
    DirectoryIndex app.php
    ErrorLog /var/log/apache2/joboard-error.log
    CustomLog /var/log/apache2/joborad-access.log combined
    <Directory "/var/www/joboard/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>

Доменное имя joboard.local, используется в конфигурации Apache и должно быть объявлено локально. Если вы работаете в Linux, то прописать локальный домен можно в файле /etc/hosts. Если вы работаете в Windows, то этот файл расположен в каталоге C:\Windows\System32\drivers\etc\. Откройте этот файл и добавьте следующую строку:

127.0.0.1 joboard.local

Если вы хотите, чтобы доменное имя заработало на локальном компьютере, вам нужно включить только что созданный виртуальный хост и перезапустить Apache. Так что откройте терминал и введите:

sudo a2ensite joboard.local.conf
sudo service apache2 restart

Symfony поставляется с визуальным тестировщиком конфигурации, он поможет вам убедиться, что ваш веб-сервер и PHP правильно настроены, чтобы использовать Symfony. Используйте следующий URL-адрес для проверки конфигурации: http://joboard.local/config.php

Joboard конфигурация

Из скриншота видно, что для нормальной работы Symfony фреймворк определяет ряд требований. Ниже приведен список действий, чтобы решить все отмеченные проблемы.

Измените разрешения на директории app/cache и app/log:

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

Установите ACL, если у вас его еще нет:

sudo apt-get install acl

Установите параметр date.timezone в php.ini

sudo nano /etc/php5/apache2/php.ini

Если с setfacl у вас возникает ошибка, то попробуйте следующие команды:

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`
sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

Найдите параметр date.timezone для секции [date] и установите его на свой часовой пояс. После этого, удалите «;», в начале строки.

# etc/php5/apache2/php.ini

date.timezone = Europe/Minsk

Установите параметр short_open_tag в значение Off в этом же файле php.ini

#/etc/php5/apache2/php.ini

short_open_tag = Off

Установите и включите PHP ускоритель (APC рекомендуется)

sudo apt-get install php-apc
sudo service apache2 restart

После перезапуска Apache, откройте окно браузера и введите http://joboard.local/app_dev.php. Вы должны увидеть следующую страницу:

Joboard окружение разработки

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

php app/console list

Создание бандла приложения

Что такое бандл?

Бандл похож на плагин в другом программном обеспечении, но в Symfony фреймворке это нечто большее. Основным отличием является то, что бандл в Symfony 2.4, включает основные функции ядра фреймворка и код написанный для вашего приложения. Бандл может содержать контроллёры, модели, роутинг и представлять из себя некий раздел на сайте, но также бандл может быть просто какой-либо библиотекой.

Создание базовой структуры приложения

Выполните следующую команду, чтобы запустить генератор бандлов в Symfony:

php app/console generate:bundle --namespace=App/JoboardBundle

Перед созданием бандла генератор задаст вам несколько вопросов. Ниже приведены вопросы и ответы (все, за исключением одного, являются ответами по умолчанию):

Bundle name [AppJoboardBundle]: AppJoboardBundle
Target directory [/var/www/joboard/src]: /var/www/joboard/src
Configuration format (yml, xml, php, or annotation) [yml]: yml
Do you want to generate the whole directory structure [no]? yes
Do you confirm generation [yes]? yes
Confirm automatic update of your Kernel [yes]? yes
Confirm automatic update of the Routing [yes]? yes

Очистите кеш после генерации нового бандла:

php app/console cache:clear --env=prod
php app/console cache:clear --env=dev

Новый бандл Joboard теперь можно найти в директории src вашего проекта: src/App/JoboardBundle. Генератор бандлов сделал DefaultController с действием index. Вы можете получить доступ к этому экшену через браузер: http://joboard.local/hello/joboard или http://joboard.local/app_dev.php/hello/joboard.

Как удалить AcmeDemoBundle

Symfony Standard Edition поставляется с полнофункциональным демо бандлом, который называется AcmeDemoBundle. Это хороший базовый бандл, для того, чтобы переодически ссылаться на него, когда вы начинаете новый проект, но в итоге вы вероятно захотите удалить его.

Введите команду, чтобы удалить каталог Acme:

rm -rf /var/www/joboard/src/Acme

Перейдите к: /var/www/joboard/app/AppKernel.php и удалите:

<?php

// ...
$bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
// ...

и теперь удалите из app/config/routing_dev.yml:

# ...
# AcmeDemoBundle routes
_acme_demo:
resource: "@AcmeDemoBundle/Resources/config/routing.yml"

В конце почистите кеш.

Окружение

Symfony 2 имеет различные окружения разработки. Если вы посмотрите в каталоге веб-проекта, вы увидите два php файла: app.php и app_dev.php. Эти файлы называются фронт-контроллеры; все запросы к приложению осуществляются через них. Файл app.php предназначен для продуктовой среды и app_dev.php используется веб-разработчиками в процессе разработки (development - девелоперское окружение). Окружение development окажется очень удобным, потому что оно покажет вам все ошибки и предупреждения в процессе разработки, а веб-отладчик – лучший друг разработчика.

Это все на сегодня. Увидимся в следующей части в которой вы узнаете о том, как будет работать Joboard!

Статьи из серии

Комментарии

8
Николай Иванов, 11 месяцев назад
2

Добрый день ! подскажите, есть ли весь код данного проекта по главам в github? копировать его отсюда в PHPStorm для учебы как то накладно. Спасибо

devacademy, 11 месяцев назад
1

К сожалению я его снёс нечаянно из битбакета, восстановить нет возможности, если у вас всё получится, то кидайте ссылку я добавлю.

Aleksandr, 8 месяцев назад
0

Здравствуйте! После перехода по ссылке http://joboard.local/app_dev.php, появляется такая ошибка:

ERROR - Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET " (from "http://devacademy.ru/posts/symfony-2-joboard-nachinaem-proekt/")" at C:\USR\www\joboard.local\app\cache\dev\classes.php line 1985

Как её исправить?

devacademy, 8 месяцев назад
0

какая версия симфони у вас установлена?

Aleksandr, 8 месяцев назад
0

2.5.*, как и у вас. Эту ошибку уже исправил. Правда вот что так и осталось, в .htaccess в directoryindex я прописал app_dev.php. Однако когда я перехожу по прямой ссылке http://joboard.local/, у меня выскакивает ошибка в алерте "An error uccured while loading the web debug toolbar (404: Not found)" при этом сама страница отображается нормально. Не знаете почему так происходит? По ссылке http://joboard.local/app_dev.php всё нормально работает

devacademy, 8 месяцев назад
0

Сложно сказать, посмотрите файл /var/log/apache2/joboard-error.log, и app/logs/dev.log, там есть описание ошибок.

Aleksandr, 8 месяцев назад
0

Вот такая запись в access.log, в error.log ничего нет 127.0.0.1 - - [10/Sep/2016:02:36:27 +0800] "GET /_wdt/e2a790 HTTP/1.1" 404 209

Aleksandr, 8 месяцев назад
0

И вот в логах Symfony [2016-09-10 02:36:25] event.DEBUG: Notified event "kernel.terminate" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelTerminate". [] []