Задание №4. Создание маршрутов



Маршруты, по которым будет работать наше приложение будут храниться в массиве в отельном файле. Именно на таком принципе работает подавляющее большинство Framework'ов. Маршруты мы будем хранить в папке config. Создайте эту папку. Назначение данной папки вам уже хорошо известно из предыдущих лабораторных работ. Именно здесь мы будем хранить и другие файлы, необходимые для настройки нашего приложения.

Создайте в папке config файл routes.php. Как выглядят маршруты и какое значение имеет каждый параметр мы подробно рассмотрели на лекции. Здесь же отметим, что маршруты будут представлять собой ассоциативный массив. В качестве индекса будет выступать запрос пользователя, а в качестве результата необходимы маршрут по нашей модели:

Не удивляйтесь написанному. Так действительно можно. Наш файл просто возвращает массив. В дальнейшем мы рассмотрим, как именно данным массивом можно пользоваться.

Еще раз к описанию маршрутов. Первый маршрут означает, что необходимо на запрос пользователя ‘contractor’ вызвать контроллер contractor и в этом контроллере метод list. Аналогичным образом строится и второй маршрут. По мере роста приложения и добавления к нему функционала маршруты усложняться, но пусть вас это пока не пугает.

Следующее что нужно сделать это заставить класс Router эти маршруты прочитать и запомнить:

Используя конструктор класса, получаем маршруты из файла rotes.php (обратите внимание как использована функция include. В качестве параметра ей передан путь к файлу, который фактически возвращает массив). Кроме того мы продолжаем использовать полные физические пути к файлам, чтобы не запутаться в дальнейшем. В метода run() мы добавили вывод маршрутов, чтобы убедиться в правильности работы приложения. Пора это сделать. Запустите приложение и просмотрите результат. Появились ли в окне браузера созданные маршруты? Да, кстати. Функция print_r позволяет вывести массив в поток вывода.

Задание №5 Файл конфигурации сервера

Все рассмотренное нами работать безусловно будет. Но для того чтобы все запросы получал именно файл index.php (а не какой либо другой, ведь у нас только одна точка входа в наше приложение это фронтконтроллер) необходимо создать в корневом каталоге вашего web приложения файл со странным именем .htaccess и следующим содержимым:

В этом файле мы сообщаем серверу, что все запросы необходимо отправлять на файл index.php, куда бы эти запросы не пришли. Ну а знания о регулярных выражениях помогут вам разобраться в том, какая именно информация будет отправляться этому файлу.

Задание №6 Метод run()

Метод run() отвечает за анализ запроса и передачу управления.

Последовательность действий в функции run() должен быть следующий:

1. Получить строку запроса;

2. Проверить существование такого маршрута в нашей таблице маршрутов;

3. Если найдется совпадение с маршрутом, то определить какой контроллер и какой action обрабатывают запрос;

4. Подключить файл класса-контроллера;

5. Создать объект контроллера и вызвать соответствующий метод action;

Используя знакомый вам из лабораторной работы №6 массив $_SERVER и параметр REQUEST_URI получаем строку параметров после названия нашего ресурса.

Проверьте работу приложения. Изменяя в строке браузера передаваемые значения:

Если на данном этапе вы видите такую картину (конечно для своего ресурса), то Вы делаете все правильно).

Сделаем красиво:

Проверьте, что все по прежнему работает.

Теперь поиск маршрута:

Тут следует напомнить, что в routes у нас находиться ассоциированный массив. Соответственно мы его обрабатываем в цикле foreach. Запустите приложение и убедитесь, что массив действительно выводиться в браузер.

Для анализа существования нужного маршрута будем использовать функцию preg_match, с которой вы познакомились в заданиях по регулярным выражениям:

Запустите браузер и убедитесь, что на запрос contractor действительно выводиться “+”:

В качестве разделителей в регулярном выражении, в нашем случае, лучше использовать иной символ не“/” т.к. такой символ может быть использовать в запросе пользователя. Мы использовали “~”.

Замените в echo “+” на значение переменной $path. Запустите приложение и убедитесь, что при указании contractor в адресе строки в окне браузера мы увидим необходимый контроллер и его метод action:

Найдите в интернете информацию о функции expodeв php. Внесите следующие изменения и просмотрите результат в браузере:

Продолжаем модифицировать код. Нам необходимо получить имя контроллера. По общей договоренности имя контроллера всегда заканчивается словом «Controller», поэтому:

Здесь мы используем функцию array_shift (полную справку по данной функции Вы можете получить в интернете). Данная функция извлекает из массива первый элемент, одновременно удаляя его из массива. Полученная строка конкатенируется со строкой «Controller» и мы получаем имя контроллера. Выведите полученное значение переменной $controllerName в браузер. Протестируйте работу приложения на данном шаге.

Как видите сформированное название контроллера соответствует тому, что мы хотели получить (на лекции мы об этом договаривались как именовать контроллеры), точнее почти получили. Имя контроллера начинается с маленькой буквы. Это не смертельно, конечно, но не желательно. Для того чтобы это исправить примените метод ucfirst() к полученному значению. Именно данная функция сделает первую букву названия нашего контроллера заглавной.

Проверьте работу приложения на данном шаге.

Аналогичным образом получим название action:

Проверьте работу приложения.

По ранее введенной договоренности методы actionдолжны начинаться именно с этого слова, после чего указывается непосредственно название метода.

Контроллер мы получили. Метод тоже. Осталось создать нужный класс (название которого у нас есть в переменной controllerName) и вызвать нужный метод (имя которого в переменной actionName). Но тут уесть нюанс. У нас нет ни одного контролера.


Дата добавления: 2018-04-04; просмотров: 397; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!