8 сент. 2014 г., 22:45
Два "разных" метода fireBeforeSaveEvent в create- и update- процессорах
Все-таки, иногда в MODX-е встречаются вещи, которые меня заставляют негодовать, мягко говоря. К примеру вот эти два метода:
И modObjectUpdateProcessor::fireBeforeSaveEvent()
Заметили как много "отличий" у этих методов? То есть как минимум можно было один метод на оба процессора сделать общим. Но главная соль вот в этой строчке:
В create- процессоре она есть, а в update- процессоре ее нет. Уточню, что это ключ массива данных, передаваемых в массив $scriptProperties, доступный в навешиваемых плагинах. При этом они еще и советуют этот ключ не использовать, и используйте типа ключ $this->objectType.
Вот у меня вопрос? Зачем так усложнять? Почему было не оставить тупо элемент object? Дело в том, что в случае когда у нас object, тогда мы не паримся и не задумываемся будет этот объект или нет. Это всегда объект, с которым будет выполняться сохранение. А вот в случае с $this->objectType нам совершенно нет гарантий какое именно название будет у этого объекта. Спросите зачем его вообще кому-то может понадобиться менять? А вот иногда надо. Простой пример - лексиконы. Может понадобиться изменить тип объекта, чтобы изменить выводимые системные сообщения, ведь там все на лексиконах, к примеру:
И вот пишу я тут "универсальный" плагин на апдейт, и не знаю, будет там ключ resource, или будет какой-то другой. И главное - нельзя обратиться к процессору и "поинтересоваться", а кокой это тип объекта и как к нему обратиться...
Вот такая фигня... Есть только вариант обратиться к элементу data, который содержит данные этого объекта, но это все-таки не объект.