Vse o WEB
Информация и размышления о Web технологиях

Symfony 2 - Быстрый старт. Часть 1

Добрый день, друзья! Сегодня мы продолжаем говорить о 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)

Loading ...

 

Итак, у нас уже есть созданный проект 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

Наверх