Прерывание внутри плагина
Добрый день, подскажите. Есть плагин, который выполняется перед сохранение данных пользователя. В случае исключительной (я создают условие сам) ситуации нужно остановить и вернуть текст ошибки. Но вот незадача, почему-то после выполнения кода, дальше моего условия скрипт не идет, а вот выполнение штатного скрипта modx (сохранение пользователя) идет.
Пример кода:
<?php
if ($modx->event->name === 'OnUserFormSave') {
// Пример условия для прерывания
if ($user->get('email') === 'blocked@example.com') {
$modx->event->output('Регистрация с таким email запрещена.');
$modx->event->stopPropagation();
return;
}
// Или выбросить исключение (если обрабатывается в компоненте или сниппете)
// throw new Exception('Регистрация с таким email запрещена.');
}
Или
<?php
if ($modx->event->name === 'OnUserBeforeSave') {
// Пример: запретить создание пользователя с определённым email
$email = $user->get('email');
if ($email === 'blocked@example.com') {
$modx->event->output('Пользователь с таким email не может быть создан.');
$modx->event->_output = 'Пользователь с таким email не может быть создан.';
$modx->event->stopPropagation(); // Остановить выполнение других плагинов
return false; // Очень важно — возврат false остановит сохранение!
}
В чем может быть причина?
}
Пример кода:
<?php
if ($modx->event->name === 'OnUserFormSave') {
// Пример условия для прерывания
if ($user->get('email') === 'blocked@example.com') {
$modx->event->output('Регистрация с таким email запрещена.');
$modx->event->stopPropagation();
return;
}
// Или выбросить исключение (если обрабатывается в компоненте или сниппете)
// throw new Exception('Регистрация с таким email запрещена.');
}
Или
<?php
if ($modx->event->name === 'OnUserBeforeSave') {
// Пример: запретить создание пользователя с определённым email
$email = $user->get('email');
if ($email === 'blocked@example.com') {
$modx->event->output('Пользователь с таким email не может быть создан.');
$modx->event->_output = 'Пользователь с таким email не может быть создан.';
$modx->event->stopPropagation(); // Остановить выполнение других плагинов
return false; // Очень важно — возврат false остановит сохранение!
}
В чем может быть причина?
}
Комментарии: 3
Т.е. другими словами в контроллер нужно вернуть
success($message = '', $data = array(), $placeholders = array()){
$response = array(
'success' => false,
'message' => $this->modx->lexicon($message, $placeholders),
'data' => $data,
);
Причина может быть в том, что сохранение пользователя нельзя прервать.
Ещё можно попробовать событие OnBeforeUserFormSave
Ещё можно попробовать событие OnBeforeUserFormSave
да, действительно. Вы правы. Через данное событие — заработало. Большое спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.