Вызов своего процессора.

Я хочу вызвать в смарти свой процессор, чтобы дергать данные из своих таблиц не через package + newQuery. Был поставлен modExtra, переименован, написаны схемы баз, созданы классы — поднята CMP, которая дергает классы из процессора через контроллер, ну все как обычно в общем. Далее я создаю в процессорах папку web, копирую туда обычный наследующий modObjectGetListProcessor процессор

class ComponentWebClassGetListProcessor extends modObjectGetListProcessor {
    public $objectType = 'ClassName';
    public $classKey = 'ClassName';
    public $defaultSortField = 'id';
    public $defaultSortDirection = 'DESC';
    //public $permission = 'list';

return 'ComponentWebClassGetListProcessor';

Теперь вызываю это дело в консоли вот это

// $modx->addPackage('component', MODX_BASE_PATH.'Component/core/components/component/model/');

// $d= $modx->getObject('ClassName',1);
// print_r($d->toArray());
print '<pre>';
ini_set('display_errors', 1);
$modx->switchContext('web');

$action = 'web/rooms/getlist';
$ns = 'myNamespace';
$params = array(
    // "limit" => 6,
);
//echo $modx->getObject('modNamespace', $ns)->getCorePath();
if(!$response = $modx->runProcessor($action,
    $params
,
array(
    'processors_path' => $modx->getObject('modNamespace', $ns)->getCorePath().'processors/',
)
)){
    print "Не удалось выполнить процессор";
    return;
}
 
print_r($response->getResponse());

На выходе Could not get table class for class и {"success":true,"total":"0","results":[]}

Схожая картина во фронте, когда вставляю в шаблон {processor}

Рассхомментирую $modx->addPackage('component', MODX_BASE_PATH.'Component/core/components/component/model/'); — все начинает работать.

Собственно, вопрос что прописать в процессоре, чтобы не нужно писать можно было не вызывать addPackage

extension_packages в консоли спасает — во фронте не хочет.

Comments

public function initialize(){
    $this->modx->addPackage('component', MODX_CORE_PATH.'components/component/model/');
    return parent::initialize();
}

Не?

Фигасе! Как я сам не сообразил..
Еще public function process() нужно переопределить, чтобы массив возвращал, а не джейсон — и красота.

Это уже на вкус и цвет. Она ж больше нигде не вызывается кроме process. Так что зачем?

        return array(
            'success'=>true,
            'total' => $data['total'],
            'results' =>$list
        );
//        return $this->outputArray($list,$data['total']);

Что значит на вкус и цвет??? process() возвращает объект||массив||строку, при этом как положительный ответ, так и отрицательный (success()|failure()), а outputArray() конкретно обрабатывает полученный массив данных. Спорит еще…

Моя не спорит. Моя говорит, как сам сделал. Вся цепочка наследуемых классов находится в файле modprocessor.class.php. При чем функция $this->outputArray используется только в одном месте https://github.com/modxcms/revolution/blob/8efb61f5d1bb30c5df2ed9eba803aa5b4e805774/core/model/modx/modprocessor.class.php#L472-L480. Исходя из этого, что страшного может случиться, если в этом месте вместо переопределенной функции outputArray мы прямо отдадим массив с данными?

Ты рушишь интерфейс своего кастомного процессора. Это чревато всякими багами. На выходе будешь ждать метод outputArray, а у тебя там ничего нет.

Серега, пусть Антон делает как ему больше нравится. Когда-нибудь сам поймет, может быть.

Ну почему. Просто я в упор не вижу проблему. Вот и уточнил, что она есть. Но если мне сказали про грабли, я не пойду где они лежат. Другое дело, что что-то и правда нужно почувствовать самому. А то не будешь же за каждую строку консультироваться.