dmtrbskkv
@dmtrbskkv
Кодим и декодим, а иногда кино смотрим

Что необходимо для работы контроллера в Bitrix?

Вот эту ссылку https://dev.1c-bitrix.ru/learning/course/index.php... я видел

И видел эту https://dev.1c-bitrix.ru/learning/course/index.php...

Но только на вопрос: "Как создать свой контроллер?" - обе ссылки не ответили. Как и десяток других в интернете. Поэтому хотел бы задать тут вопросы:
  • Почему битрикс должен видеть мой класс и где он должен находиться? Как работает автозагрузчик? Везде ли он работает? Есть ли проблемы с версиями? Отличия ядер битрикса или ещё какой черной магии?
  • Как настроить defaultNamespace и namespaces в .settings.php, чтобы всё заработало?
  • Есть ли где-то полностью рабочий пример реализации своего класса, с описанием того где файлы и почему они там?
  • Какая именно должна быть ссылка для проверки роута?
  • Вопрос задан
  • 628 просмотров
Решения вопроса 1
gromdron
@gromdron Куратор тега Битрикс24
Работаю с Bitrix24
Почему битрикс должен видеть мой класс и где он должен находиться?


Есть несколько способов чтобы "Битрикс" (а на самом деле php) видел ваш класс:
1. Ванильный php: класс должен быть подключен к выполнению явно через подключение файла в которым он описан
2. Вандальный/Коробочный Б24: Класс должен располагаться где-угодно, но быть заргистрирован через автолоадер (здесь не важно что вы используете: composer, битриксовый или свое на базе spl_autoloader) в init.php
3. Через модули.

Если мы говорим о классическом bitrix framework то правильнее делать модуль.
Причем в модуле есть 2 варианта его инициализации:
1. Через "автолоадер" или прямое подключение в include.php ()
2. Через `psr`-подобный загрузчик в папке lib (https://dev.1c-bitrix.ru/learning/course/index.php...)

Иначе говоря:
- Либо вы размещаете где хотите и подключаете его сами
- Либо если вы работаете с модулем то положить его по psr4 в папочку `lib` вашего модуля.

Как работает автозагрузчик?


Если вы читали абзац выше, то поняли, что единого центразиованного загрузчика тут нет.
Есть:
1. Глобальный автозагрузчик из модулей (который загружает по psr4 из активных подключенных модулей)
2. Локальный автозагрузчик модуля (для подключенного модуля)
3. Кастомные загрузчики (тут кто во что горазд).

Соответственно, если мы говорим про 1 и 2 типы загрузчиков, что сначала необходимо подключить модуль (`\CModule::IncludeModule` или `\Bitrix\Main\Loader`), а потом уже вызывать классы.
Если вы попытаетесь вызывать классы, а до вас никто не подключил модуль, то вы получите фатал.

Везде ли он работает?


Последний абзац выше показывает что нет.

Есть ли проблемы с версиями? Отличия ядер битрикса или ещё какой черной магии?


Описания в зависимости от версии особо нет.
Что касается проблем, то примерно до версии 18 psr-подобного загрузчика не было, потом он начал появляться и совершенствоваться.
Если ориентироваться на последнюю версию Битрикс24, то проблемы если и есть, то только локального характера связанные с модульной структурой.
Здесь могу посоветовать только проштудировать документацию и потыкаться самому. Универсальной формулы нет - документация тут скудная.

Как настроить defaultNamespace и namespaces в .settings.php, чтобы всё заработало?


Здесь нужно намного больше информации, например: как модуль используете, что сделали, что ожидаете и что работает не так как ожидали.
Пока могу лишь ограничиться ответом "настроить согласно документации" (ха-ха, злая шутка, особо документации нет - нужно больше вводных данных см выше)

Есть ли где-то полностью рабочий пример реализации своего класса, с описанием того где файлы и почему они там?


Нет, такого нет.
В Битриксе это можно получить только после изучения всех курсов/доков/экзаменов и с точки зрения практического опыта.
Можно посмотреть уже готовые модули (что-то подобное можно найти на github, например https://github.com/alex-nzr/bitrix-example-boilerp... или https://github.com/zahalski/awz.ydelivery/tree/mas...)/
Можно посмотреть как это делать без модулей https://bx24devbook.website.yandexcloud.net/index.html (тут скорее больше описания чем конкретные классы).

Готового гайда как у симфони здесь увы нет.

Какая именно должна быть ссылка для проверки роута?

Что вы имеете ввиду? Проверки чем? Ссылка на что? Какого роута?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Drayde
Писал уже Вам в другом вопросе, Вы зашли в новый фреймворк и вместо того, чтобы изучить последовательно доку, посмотреть курсы, ядро, идете сюда и задаёте вопросы, ответы на которые уже есть в вышеперечисленных источниках.

Почему битрикс должен видеть мой класс и где он должен находиться?


Потому, что автодолоадер классов.

Как работает автозагрузчик? Везде ли он работает?


Отает в доке и ядре.

Есть ли проблемы с версиями? Отличия ядер битрикса или ещё какой черной магии?


Вы серьезно думаете, что тут вам будут рассказывать про отличия ядер? А самому посмотреть список обновлений ядра на офф сайте?

Как настроить defaultNamespace и namespaces в .settings.php, чтобы всё заработало?


В первой ссылке ответ на 2й странице "Контроллер", или дальше 1й не читали?

Есть ли где-то полностью рабочий пример реализации своего класса, с описанием того где файлы и почему они там?


Есть. В примерах доки и практически любом битриксовом модуле.

Какая именно должна быть ссылка для проверки роута?


В первой ссылке ответ на 2й странице "Контроллер"(а да, вы же дальше 1й стараницы не дошли), там даже метод генерации ссылки описан.

Может вместо "Кодим и декодим, а иногда кино смотрим" посмотреть доку с самого начала, и ролики с того же ютуба, есть и тех потоки битрикса, на которых они сами объясняют и куча других материалов, от той же интерволги.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы