Создаем свой Фреймворк на компонентах symfony2. Часть 4

Прежде чем начать сегодняшнюю статью, давайте проведем небольшой рефакторинг, что бы сделать наши шаблоны немного более читаемыми.

Раз мы распаковали параметры запроса, то можем упростить hello.php следующим образом:

Теперь самое время добавить новой функциональности.

Один из самых главных плюсов моего веб-сайта — форма его URL запросов. Благодаря URL карте, мы отделили запросы от кода, генерирующего соответствующий ответ, но пока что, это не очень гибко. Например, возможно, мы захотим сделать поддержку вставки данных запроса непосредственно в URL, а не в строку запроса, как было ранее.

Для реализации этого функционала, мы будем использовать компонент Symfony2 Routing. Как обычно, добавьте запись о нем в composer.json и запустите команду php composer.phar update, что бы его установить.

С этого момента, мы будем использовать автолоадер, созданный композером, вместо нашего. Удалите файл autoload.php, и заменить ссылку на него в front.php

Вместо массива соответствия для URL, компонент Routing использует экземпляр RouteCollection.

Давайте добавим маршрут, описывающий URL /hello/SOMETHING, и еще один, для более простого /bye

Каждая запись в наборе определяется именем(hello), и экземпляром класса Route, для которого задается шаблон (/hello/{name}), и массив значений по умолчанию (array(‘name’ => ‘World’)).

Что бы узнать больше, можете почитать официальную документацию компонента Routing.

Исходя из информации хранящейся в экземпляре класса RouteCollection, экземпляр UrlMatcher может сопоставлять URL пути:

Метод match() принимает путь запроса, и возвращает массив параметров (обратите внимание, что сам найденный маршрут сохраняется в специальном параметре _route):

Метод match() выбрасывает Exception, когда не может найти ни одного маршрута.

Учитывая все, что мы знаем, давайте напишем новую версию нашего фреймворка:

В коде, есть несколько новых вещей:

  • Имена маршрутов соответствуют названиям шаблонов.
  • Корректно обрабатывается ошибка 500.
  • Для упрощения шаблонов, распаковываются параметры запросов.

  • Конфигурация маршрутов была перемещена в отдельный файл:

    Теперь у нас есть четкое разделение между конфигурацией (которая определяется в файле app.php) и фреймворком (основной код, на котором строится наше приложение в файле front.php).

Менее чем в 30 строк кода мы имеем новый фреймворк — более мощный и более гибкий чем предыдущий. Наслаждайтесь!

Использование компонента Routing дает нам одно большое приемущество: возможность генерировать URL основываясь на существующих маршрутах. Когда вы используете и URL matching и URL generation в своем коде, изменение URL шаблонов не должно производить никакого эффекта. Хотите знать как использовать генератор? Невероятно легко:

Так же, можно генерировать и абсолютные URL

Волнуетесь за производительность? Основываясь на ваших определениях маршрута, создайте максимально оптимизированный URL matcher класс, который заменит дефолтный UrlMatcher:

Что может быть производительнее?

Получите набор своих маршрутов в виде Apache rewrite rules

К содержанию >>
Оригинал статьи на английском языке >>
Исходный код из статьи >>

Не забудьте поделиться статьей с друзьями

Подписывайтесь на меня в соц. сетях

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *