Короткий ответ
Валидация, permissions, response format, transactions, CSRF, журналирование и повторное использование. Разбираем практический порядок работ, риски, стоимость и то, как принять результат без новых проблем.
Ниже — конкретные проверки, команды, таблицы и контроль результата. Выполняйте изменения только после резервной копии, если действие затрагивает рабочую систему.
Processor — граница доверия
Даже если поле скрыто в Manager, пользователь может отправить запрос вручную. Processor обязан проверять permission, входные данные и право на конкретный объект.
Каркас processor с проверками
class MyExtraUpdateProcessor extends modObjectUpdateProcessor {
public $classKey = 'MyExtraItem';
public $objectType = 'myextra_item';
public function beforeSet() {
if (!$this->modx->hasPermission('myextra_save')) {
return 'access_denied';
}
$name = trim((string)$this->getProperty('name'));
if ($name === '') {
$this->addFieldError('name', 'required');
}
return parent::beforeSet();
}
}
return 'MyExtraUpdateProcessor';Processor должен отвечать за
| Задача | Где |
|---|---|
| ACL/permission | server-side |
| Валидация | processor |
| Работа с xPDO object | processor/model |
| JSON response | processor |
| UI validation | дополнительно в JS, но не вместо server-side |
Как проверить результат
После изменений повторите исходный сценарий, зафиксируйте результат и убедитесь, что соседние функции работают так же, как до правки. Если проблема проявляется не всегда, проведите несколько повторов в одинаковых условиях и сохраните диагностические данные.