Добрый день, друзья! Сегодня мы продолжаем говорить о Symfony 2 - поистине мощном и современном фреймворке. Его вполне можно назвать сложным для освоения, но поняв суть концепции, заложенной разработчиками, можно значительно ускорить процесс создания приложения.
Для того, чтобы начать разбираться с Symfony 2, у вас должен быть установлен и настроен стек LAMP. У некоторых начинающих разработчиков сразу может возникнуть вполне закономерный вопрос: можно ли использовать Denwer или другие пакеты, если вы работаете на Windows машине? Отвечаю: можно, но это чревато некоторыми проблемами. К тому же, если вы PHP разработчик, то пора отвыкать от подобных вещей. Но я отвлекся. По сути, в PHP, начиная с версии 5.4.0, присутствует встроенный сервер, который целесообразно применять только для разрабоки и отладки. Не удивительно, что и Symfony 2 тоже использует его. Об этом и не только читайте дальше.
ШАГ 1. Установка Symfony installer
Linux & Mac OS
Открываем консоль и выполняем команды:
$ sudo curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony
$ sudo chmod a+x /usr/local/bin/symfony
В результате у нас появляется системная команда symfony.
Windows
Открываем консоль и выполняем команду:
c:\> php -r "readfile('https://symfony.com/installer');" > symfony
Далее перемещаем скачанный файл symfony в директорию с проектом и можем запускать приложение как указано ниже:
c:\> move symfony c:\projects
c:\projects\> php symfony
ШАГ 2. Создание проекта
После установки инсталятора, создаем проект:
# Linux, Mac OS X
$ symfony new project_name
# Windows
c:\> cd projects/
c:\projects\> php symfony new project_name
Также существует возможность создавать проекты на основе определенных версий Symfony и без инсталятора с помощью Composer. Почитать подробнее можно здесь.
Для тех, кто пользуемтся PhpStorm, существует также возможность создания проекта Symfony прямо из IDE (File -> New project -> Symfony Installer)
Итак, у нас уже есть созданный проект Symfony 2. Структура директорий выглядит следующим образом:
blog/
?? app/
? ?? cache/
? ?? config/
? ?? logs
? ?? Resources/
? ?? AppKernel.php
?? bin/
?? src/
? ?? AppBundle/
?? tests/
? ?? AppBundle/
?? vendor/
?? web/
?? app.php
?? app_dev.php
1. /app - каталог приложения, здесь хранятся конфиги, логи, ресурсы приложения
2. /src - каталог с бандлами (в других фремфорках их еще называют модулями - структурные единицы приложения)
3. /vendor - каталог со всеми зависимостями проекта, создается composer'ом
4. /web - каталог, доступный извне, публичный каталог.
Чтобы посмотреть, что у нас вышло, нужно запустить web-сервер.
ШАГ 3. Запуск web-сервера
Для этого переходим в каталог с проектом, используя консоль и выполняем команду:
$ php app/console server:run
Чтобы запустить сервер в фоновом процессе, выполняем команду:
$ php app/console server:start
Для проверки статуса сервера используем команду:
$ php app/console server:status
И, наконец, для остановки сервера:
$ php app/console server:stop
После того, как сервер запущен, можем посмотреть переходим по адресу http://127.0.0.1:8000/ и можем увидеть нечто вроде
Теперь нам нужно настроить проект.
ШАГ 4. Конфигурация проекта
Для начала открываем в браузере адрес http://127.0.0.1:8000/config.php. Видим информацию о том, подходит ли конфигурация нашего рабочего окружения под требования Symfony. Если нет, устраняем все проблемы.
Все основные конфигурационные файлы проекта находятся в папке /app/config. Первый файл, который нам понадобится - /app/config/parameters.yml. Это файл в котором хранятся все основные параметры приложения. По умолчанию он генерируется при создании проекта и выглядит следующим образом:
# This file is auto-generated during the composer install
parameters:
database_host: 127.0.0.1
database_port: null
database_name: symfony
database_user: root
database_password: null
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: null
mailer_password: null
secret: aa65856c203c9673ea0f1e6afe6df4b97295c642
Если ваше приложение, например, использует базу данных, замените соответствующие параметры на свои. Важно также отметить, что этот файл обычно исключают из комитов в репозитории систем контроля версий и для каждой среды исполнения он свой. Разработчики рекомендуют нам хранить только в этом файле все параметры нашего приложения.
На этом этапе у нас есть все, чтобы начать разработку.
Обычно в подобных статья пишут первое приложение типа "Hello, World". Мы не станем нарушать традицию и добавим нашу первую страничку в проект :)
ШАГ 5. Создание первой страницы
Для создания новой страницы нам нужно:
1. Настроить маршрут
Маршрутом (route) принято называть соответствие пути в адресной строке определенному контроллеру.
Symfony предлагает нам несколько вариантов задания роутов: xml, yml, ini, php, annotation. Рекомендуемый разработчиками подход - annotation. По их словам, это позволяет нам иметь всю необходимую информацию под рукой и не просматривать несколько файлов конфигурации.
Основные правила роутинга хранятся в файле /app/config/routing.yml. По умолчанию мы можем увидеть там следующее:
app:
resource: "@AppBundle/Controller/"
type: annotation
Это означает, что все роуты для контроллеров в папке /src/AppBundle/Controllers описываются с помощью аннотаций в контроллерах.
2. Создать контроллер для страницы
Назовем наш контроллер IndexController и сохраним в файле /src/AppBundle/IndexController.php. Сразу скажу, что разработчики фреймворка рекомендуют создавать только один бандл приложения AppBundle и располагать там все компоненты приложения, если только вы не хотите использовать какой-либо функционал в другом приложении.
Пишем следующий код в контроллере.
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; # needed for annotation @Route
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class IndexController extends Controller
{
/**
* @Route("/hello/{name}", name="hello_action")
*/
public function helloAction($name)
{
return $this->render('index/hello.html.twig', array(
'name' => $name
));
}
}
Таким образом, мы создали action hello, который ожидает параметр name, далее мы отрисовываем наше представление, передавая этот параметр.
Маршрут мы описали в виде аннотации перед action. Хочу отметить, что кавычки во всех аннотациях должны быть именно двойные во избежание ошибок парсера. Подробнее о маршрутах можно почитать здесь.
Тут важно отметить, что любой action в Symfony должен возвращать объект Response. Поэтому в коде мы видем оператор return.
3. Создать файл представления для страницы (view)
Представления (а по-народному - "вьюхи") находятся в каталоге /app/Resources/views. Собственно, файлы представления могут находится также непосредственно в бандлах. Подробнее о приоритетах каталогов размещения и о самих каталогах можно почитать здесь.
Symfony и тут дает нам право выбора шаблонизатора, но мы будем пользоваться дефолтным - Twig, ибо он воистину прекрасен и дает возможность наследовать шаблоны, и, соответственно, переопределять некоторые их блоки. Здесь мы создаем папку, одноименную с нашим контроллером - index, и, собственно, файл представления hello.html.twig. Имя файла расшифровывается следующим образом:
- hello: имя action
- html: формат представления. Также может быть xml, json и др.
- twig: файл шаблонизатора Twig. Подробнее о Twig можно почитать здесь.
Пишем следующий код в файле:
{% extends '::base.html.twig' %} {# extend basic template #}
{% block body %} {# override block body #}
<p>Hello, <i>{{ name }}</i>. Let me congratulate you because you've created your first Symfony 2 page!</p>
{% endblock %}
Ну что, посмотрим на результат.
Подведем итоги. Мы научились разворачивать новый Symfony проект, посмотрели на структуру директорий в нем, бегло познакомились с конфигурацией проекта, маршрутами и шаблонизатором. Теперь все это, в том числе и создание новой страницы не должно быть проблемой. Но это только начало, основа основ. Symfony таит в себе множество интересного. Еще несколько интересных базовых вещей ищите в продолжении этой статьи.
Часть 1 | Часть 2