Хуки по своему существу – это скрипты, которые запускаются после того, как форма прошла валидацию FormIt. Они могут соединяться: сначала выполняется первый хук, если он пройден удачно, задействуется следующий. Если хук не пройден, обработка следующего не начинается, вместо этого программа возвращается к форме и отправляет сообщение об ошибке.
Крючками могут быть также имена сниппета, которые далее превращают сниппет в хук.
Есть два типа хуков:
• «рreHook» задается через свойство «preHooks» в сниппете FormIt, который выполняется при загрузке формы. Полезно для предварительной загрузки значений.
• обычный хук, задается через свойство «hooks» в сниппете FormIt, который выполняется после проверки формы. Пригодится для настраиваемой пост-обработки.
Использование preHooks
Просто укажите preHook в свойстве «preHooks» в Вашем запросе сниппета FormIt. Здесь нет доступных встроенных preHooks, но если у Вас есть preHook под названием «loadCustomValues»:
[[!FormIt? &preHooks=`loadCustomValues`]]
Затем запустите сниппет «loadCustomValues» до загрузки формы. Далее можно установить поля формы следующим образом:
<?php
$hook->setValue('name','John Doe');
$hook->setValue('email','john.doe@fake-emails.com');
return true;
Или же с помощью -> SetValues:
<?php
$hook->setValues(array(
'name' => 'John Doe',
'email' => 'john.doe@fake-emails.com',
));
return true;
Обратите внимание, что использование здесь метода SetValues () создаст соответствующие плейсхолдеры, доступные для Вашего email-чанка; эффект от ручной установки значений схожий с добавлением скрытых полей в форму.
Вы можете делать все, что захотите в preHook. Помните, что если Ваш preHook или Hook успешные, нужно указать return true. Если Вы хотите добавить сообщение об ошибке в поле:
$hook->addError('user','User not found.');
return false;
Использование хуков
Просто укажите хук в свойстве «hooks» в запросе сниппета FormIt. Например, так загружаются спам-хуки и почтовые хуки:
[[!FormIt? &hooks=`spam,email`]]
Встроенные хуки
Это список из встроенных хуков, которые поставляются в пакете с FormIt:
-spam
Хук redirect (если используется) всегда должен указываться как последний хук. Помните, что хуки реализовываются в порядке, указанном в свойстве.
Настраиваемые хуки
Любой сниппет может быть использован с Formit в качестве настраиваемого хука. Сниппет должен вернуть true в случае успеха, либо false или совокупность сообщений об ошибках в случае отказа (см. ниже). Если сниппет возвращает false, хуки, перечисленные после сниппета в параметре &hooks, не будут выполняться. Если сниппет не найден, хуки после него в списке будут выполняться.
Регистрация настраивамых хуков
Чтобы зарегистрировать настраиваемый хук, просто добавьте имя сниппета в параметр &hooks. Хуки будут выполняться в том порядке, в котором они появляются в параметре &hooks. Ваш сниппет может иметь любую позицию в списке.
Доступ к полям FormIt в Hook
Поля Formit доступны через hook api. Пример:
$email = $hook->getValue('email');
$allFormFields = $hook->getValues();
Если Вы хотите установить поля, Вам все же нужно будет получить к ним доступ следующим образом:
$hook->setValue('email','reset@thisemail.com');
$hook->setValues(array(
'name' => 'Shaun',
'books' => 'Hunger Games,To Kill a Mockingbird,Mindset',
));
Возвратные значения настраиваемого хука
Сниппеты должны возвращать true при успешном исходе. В случае неудачи сниппет может вставить сообщения об ошибке в переменную ошибок объекта крючка и выдать false. В любом случае хуки, перечисленные после настраиваемого хука в параметре &hooks, не будут реализовываться.
Объект fiHooks доступен в сниппете как $hook, который можно использовать для возврата общих сообщений об ошибках от сниппета:
$errorMsg = 'User not found';
$hook->addError('user',$errorMsg);
return false;
Опять же, помните: если Ваш хук удачный, убедитесь, что «return true;» находится в конце Вашего Hook. Если Вы используете «return false;» или возврат значения не состоялся, для FormIt это означает, что хук не пройден. Кроме того, убедитесь, что любые указанные Вами настраиваемые хуки расположены перед хуком-редиректом в свойстве hooks.
Файловые хуки
FormIt 2.0.0+ поддерживает файловые хуки и preHooks. Это означает, что Вы можете указать FormIt прямо в файле PHP для использования в качестве настраиваемого хука. Например:
[[!FormIt?
&hooks=`[[++assets_path]]hooks/my.hook.php`
]]
Таким образом производится определение MODX тегов в строке хука, а затем поиск хука в assets/hooks/my.hook.php. Если файл найден, он будет определять хук оттуда.