Роутинг
Обновление
Core модуль
Первоначальная настройка
local/.settings_extra.php
Точка входа в приложение
Роутинг
local/views
Контроллеры
WebController
Helper для renderView
Главная страница
View файл
Каталог
catalogAction
Каталог
Админка
Админка
1.54M
Категория: ПрограммированиеПрограммирование

Разработка сайта на Bitrix с использованием роутинга и контроллеров

1. Роутинг

РАЗРАБОТКА С НУЛЯ ИСПОЛЬЗУЯ РОУТИНГ И КОНТРОЛЛЕРЫ

2. Обновление

В контроллерах появились методы renderView и
renderComponent
Это позволяет избавиться от urlrewrite и делать всю
маршрутизацию проекта через роутинг и контроллеры

3. Core модуль

Мой модуль - https://github.com/BkycHblu-6oPwuK/beeralex.core
При установке в local создает urlrewrite.php, моя реализация
подключает routing_index.php моей реализации. В отличии от
битриксового, мой умеет работать с контроллерами вне модулей,
что позволяет все контроллеры располагать в автоподгружаемой
композером области. Например в – local/lib/App

4. Первоначальная настройка

В моей сборке докера выполните
публикацию nginx файлов, нужно
изменить маршрут обработки bitrix
В _conf/conf.d/snippets/location.conf
найдите блок location @bitrix, нужно
изменить SCRIPT_FILENAME с
bitrix/urlrewrite.php, на
local/urlrewrite.php

5. local/.settings_extra.php

В конфигурации битрикса нужно задать правила подключения
файлов роутинга, в .settings под ключом «routing»
Роутинг располагается в bitrix/routes, либо в local/routes. Файлы
web.php и api.php, или те что вы указали в конфигурации
роутинга в .settings.php

6. Точка входа в приложение

Index.php файл приложения тоже должен подключать
urlrewrite.php, чтобы роутинг работал сразу с главной страницы

7. Роутинг

Документация - https://docs.1cbitrix.ru/pages/framework/routing.html
Файлы web.php и api.php должны возвращать замыкание

8.

9. local/views

В целом в битриксе рендер файлов через контроллер - это что
то новое, поэтому я решил располагать страницы в local/views
Пока вот такая структура, возможно что то изменится при
применении этого на реальных проектах

10. Контроллеры

Все контроллеры располагаю в local/lib/App/Http/Controllers
Контроллеры должны быть наследниками
Bitrix\Main\Engine\Controller
Но этот класс хорошо подходит для api запросов, а вот для веба
так себе. При ошибках пользователь будет видеть ошибки в json
формате

11. WebController

В core модуле есть базовая
реализация контроллера для таких
страниц.
\Beeralex\Core\Http\Controllers\W
ebController
В этом контроллере
переопределено поведение при
ошибках
При ошибках происходит
подключение файла
local/views/errors/exceptions.php
Ошибки выводятся и скрипт
прекращает выполнение

12.

13. Helper для renderView

Так же WebController предоставляет метод помощник для
подключения views из local/views
Константа VIEWS_PATH = /local/views/
Путь к файлу строим через точки, а .php расширение файла не
пишем, идейно как в laravel

14. Главная страница

В web.php добавлю маршрут для главной страницы
А экшен в контроллере подключает файл – local/views/index/index.php

15. View файл

Файл выглядит вот так, header.php и footer.php можно не
подключать, битрикс это сделает сам.

16.

17. Каталог

Каталог комплексный компонент и его маршрут не
ограничивается адресом /catalog/, а может дополняться id или
кодами разделов и id/кодами элементов.
Поэтому использую параметр search и where условие для
роутинга, чтобы любой маршрут после /catalog/ подходил.

18. catalogAction

Экшен контроллера возвращает вызов метода
renderComponent с параметрами – компонент, шаблон и
arParams

19. Каталог

Либо выносите вызов компонента в
local/views/catalog/index.php
И в контроллере вызываете view

20. Админка

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

21. Админка

Подключая компонент через
renderComponent, параметры
будут отдавать такую ошибку,
армитраж так же будет работать
English     Русский Правила