LingLing 09 сентября 2013 0 1
Ох, вообщем нужна помощь так как с ООП у меня проблемы. Вообщем нужно обратиться к методам одного класса известного модуля (по коду видно), но есть проблемы. Вообщем вот я получаю сервис.

$articles = $modx->getService('articles','Article',
        $modx->getOption('core_path') . 'components/articles/model/articles/', $scriptProperties
);


Затем мне нужно в ручную создать ресурсы (в данном случае новости) и применить некоторые методы из пакета Article.

$document = $modx->newObject('Article');
......


В итоге наблюдаю ошибку при создании:

Fatal error: Class 'Article_mysql' not found in .................\core\xpdo\xpdo.class.php on line 763

Погуглив я вроде как стал понимать, что проблема кроется в одинаковых названиях классов. Но теперь непонятно, что можно сделать чтобы подключить те методы без конфликта через $modx->getService так как менять название в схеме таблицы это костыль, который не хочу делать. Думаю наверняка есть простой метод обхода проблемы, но плохие познания в ООП подводят.
1 комментарий
Fi1osof1
Fi1osof 09 сентября 2013г в 15:23 #
Я Articles не использую, но судя по всему у вас путаница в целом.
$document = $modx->newObject('Article');
Для того, чтобы это корректно работало, вам нужно подключить пакет, если он не подключен, а именно использовать $modx->addPackage() или подключить extenstionPackage. Подробней написано здесь: modxclub.ru/blog/115.html

Когда подключается пакет, тогда указывается папка, в которой xPDO будет искать запрашиваемые классы.
Когда выполняется метод $modx->newObject($className), xPDO выполняет loadClass($className), который ищет не только сам файл с этим классом, но и сопутствующие файлы для конкретного типа базы данных (мап- и db- файлы).

А вот используемый метод $modx->getService($serviceName, $className) тоже выполняет $modx->loadClass(), но только с еще тремя параметрами ('', false, true), которые указывают, что не надо использовать мап-файл. В итоге вы получаете указанный класс, но теряете mysql-класс (не подгружается сопутствующий файл). Вот поэтому вы и получаете фатальную ошибку Fatal error: Class 'Article_mysql' not found in…

Собственно, поэтому я и говорю, что вы все напутали. $modx->getService() используется совершенно для других целей.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.