vasenin26 15 октября 2014 0 15
Подскажите пожалуйста, какой метод можно переопределить, чтобы после того как данные были прочтены из базы дописать в текущий объект ещё параметры взятые их другого места ( к примеру из файла ). Постановка задачи именно такая - связи не подходят, нужно чтобы именно этот объект брал дополнительные данные из другого места и добавлял их к тем что были получены из таблицы.
15 комментариев
Fi1osof1
Fi1osof 15 октября 2014г в 14:46 #
Вопрос: это ваш собственный класс, расширяющий xPDOObject, или вы хотите в родной класс добавить плюшек?
v
vasenin26 15 октября 2014г в 16:43 #
Значит задача стоит так: Есть всем известный MIGXdb, он умеет в беке создавать таблички связанные с базой данных, что позволяет добавлять/редактировать записи таблицы без программирования собственной CMP и контроллеров. Но данный компонент работает только с одной таблицей - для этого в его параметры нужно указать класс прописанный в схеме базы данных. Вся загвоздка в том что хотелось бы добавляя данные в одну таблицу одно передаваемое поле парсить (банальный explode) и записывать как строки в связанную таблицу - с этим проблем нет, я переопределил в моём классе метод save и отслеживаю передачу этого поля, затем сохраняю и запускаю parent::save();

Теперь обратная задача - при редактировании загрузить в поле данные из связанной таблицы предварительно собрав их в одну строку. Я вижу такую логику: в классе прописанном в схеме данных переопределить метод который достаёт дынные из базы и записывает их в массив, добавив туда извлечение нужных мне данных.

Сейчас я обнаружил что можно переопределить процессор с которым будет работать MIGXdb, возможно это лучшее решение или быть может проще расширить класс? Что скажите?
v
vasenin26 15 октября 2014г в 16:57 #
Нет, к сожалению процессор это не то о чём я подумал - не подходят.
v
vasenin26 15 октября 2014г в 17:10 #
Ну собственно был переопределён метод toArray, данный случай удовлетворяет, но если знаете лучшее место для добавления произвольных дынных - буду признателен если расскажите.
Fi1osof1
Fi1osof 15 октября 2014г в 18:26 #
Хорошо, это "ваш" класс, раз вы ему переопределили метод save(). Так что вам мешает тогда, к примеру, переопределить метод _loadInstance()? Типа так:
public static function _loadInstance(& $xpdo, $className, $criteria, $row) {
$instance = parent::_loadInstance($xpdo, $className, $criteria, $row);
/*
some code, for example $instance->set('foo', $foo);
*/
return $instance;
}
v
vasenin26 15 октября 2014г в 18:40 #
Да, собственно вопрос и был в том КАКОЙ метод лучше переопределить )
Fi1osof1
Fi1osof 15 октября 2014г в 18:42 #
Ну, я думаю, что этот - самый подходящий. Он именно тогда, когда объект (его данные) берется из БД, а не когда новый создается или типа того.
AlexBaks1
AlexBaks 15 октября 2014г в 19:14 #
Расширяй процессор MIGXbd это делается не сложно и не к чему трогать объекты xpdo
v
vasenin26 15 октября 2014г в 19:35 #
Ну вообще это распространённая практика переопределять методы в классах работы с базой данных, даже тот же migxdb использует этот подход.
v
vasenin26 15 октября 2014г в 19:38 #
Хотя да, в данном случае логичнее было бы просто накидать процессор.
Fi1osof1
Fi1osof 15 октября 2014г в 19:49 #
Человек спросил что переопределить, я ответил :)
А переопределять класс или процессор писать - это уже другой вопрос, и он совершенно имеет место быть. На усмотрение человека.
v
vasenin26 15 октября 2014г в 21:39 #
Накостылял?
Fi1osof1
Fi1osof 15 октября 2014г в 22:01 #
Не факт. Все зависит от задачи. К примеру, если задача четко локальная, и точно известно что только с такими классами надо выполнить данную функцию, то с классом получится предпочтительней. Предпочтительней в том плане, что где бы вы ни выполнили инициализацию объекта $modx->getObject() или $som_object->getOne('MyClass'), у вас всегда будет выполнен этот метод и будут получены данные.
А вот если задача именно в данном месте получить сопутствующие данные, то процессор может оказаться предпочтительнее, так как в таком случае вы не завязаны на конкретном классе, и даже если там будут данные другого касса, то процессор все равно их получит.
Резюме: все зависит от задачи.
v
vasenin26 15 октября 2014г в 22:24 #
Спасибо. Большая честь поучиться у грамотного человека. Завтра буду разбирать как настроить процессор.
Fi1osof1
Fi1osof 15 октября 2014г в 23:08 #
Не стоит. Мы не в 16-ом веке :)
Tramp13571
Tramp1357 16 октября 2014г в 00:43 #
Предлагаю создать отдельный болог по MIGX
Fi1osof1
Fi1osof 16 октября 2014г в 12:02 #
Сделано.
Tramp13571
Tramp1357 16 октября 2014г в 12:04 #
Здорово! Я думаю, многим интересна эта тема, а документацию приходится по крохам собирать.
Fi1osof1
Fi1osof 16 октября 2014г в 12:06 #
Думаю, Алексей мог бы большой вклад в его копилку сделать.
AlexBaks1
AlexBaks 16 октября 2014г в 13:06 #
Мог бы но не сейчас, много работы. Александр вы бы могли пока начать а там глядишь и я присоединюсь.
Fi1osof1
Fi1osof 16 октября 2014г в 13:07 #
Да, какие-то темы в беседе могут проясниться.
Tramp13571
Tramp1357 16 октября 2014г в 13:10 #
Постараюсь :)
Tramp13571
Tramp1357 16 октября 2014г в 12:15 #
Очень на это надеюсь :)
Fi1osof1
Fi1osof 16 октября 2014г в 12:32 #
Оффтоп: Саш, по возможности пиши ответом, чтобы структуру комментов было видно.
Tramp13571
Tramp1357 16 октября 2014г в 13:09 #
ок
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.