После установки модуля в разделе "Настройки"->"Настройки продукта"->"Список мастеров" будет доступен новый мастер "digitalwand:mvc" - "Мастер создания MVC-компонента". В результате его работы будут созданы файлы компонента в каталоге /local - в соответствии с заданными к мастере параметрами. Получившийся компонент полностью работоспособен и готов к использованию или кастомизации.
Ниже перечислены детали работы компонента, если вы собираетесь написать его вручную или хотите разобраться, как всё работает.
Допустим, нам нужен компонент, который будет работать по нескольким URL:
- / - при запросе к корню
- /one/
- /two/
.parameters.php компонента необходимо оформить, согласно мануалу битрикса. А class.php компонента должен выглядеть примерно так:
use DigitalWand\MVC\BaseComponent;
\CBitrixComponent::includeComponentClass("digitalwand:mvc.base");
class TestComponent extends BaseComponent
{
public function actionIndex()
{
$this->arResult = 'index';
}
public function actionOne()
{
$this->arResult = 'one';
}
public function actionTwo()
{
$this->arResult = 'two';
return 401;
}
}
Компонент необходимо вывести на сайте, включить в настройках режим ЧПУ, убедиться, что урлы в настройках указаны правильно.
При переходе на URL с компонентом, будет создан экземпляр класса TestComponent.
По основному url будет вызываться функция actionIndex()
, при переходе к /one/
будет вызвана actionOne()
,
к /two/
- actionTwo()
.
При необходимости можно задать http-код ответа для url. Так, функция actionTwo()
возвращает http-код 401.
Результаты работы всех функций по-умолчанию кешируются с разными ID кеша.
В случае, если какие-то части URL должны быть преобразованы в переменные, необходимо настроить плейсхолдеры в .parameters.php, отредактировать параметры подключения компонента.
Так же необходимо внести изменения в класс.
Предположим, мы хотим получить данные из URL /filter/date/15.03.1988/. Шаблон URL для указания в настройках
компонента должен тогда выглядеть так: /filter/#TYPE#/#VALUE#/
, а action-функция контроллера
будет принимать дополнительные параметры:
class TestComponent extends BaseComponent
{
public function actionFilter($type, $value)
{
//TODO: реализуем логику фильтра
}
}
В переменной $type
будет содержаться строка "date", в переменной $value
- строка "15.03.1988".
Проблема: ни одна функция не работает, по любому URL попадаю в actionIndex
Решение: скорее всего, отсутствует завершающий слеш в url. Для битрикса url с завершающим слешом и без него - разные урлы. Программно это не решается, нужно выставить рерайт для публичной части сайта (но не для админки: она сломается)