Миниблог

Дебаг в стандартных процессах modx

И вначале реклама, небольшой блок. Прошу не сердиться и не вносить ее в фильтры блокировщиков.

подробнее о рекламодателе можно узнать внутри блока
Спасибо. А теперь сам материал.

Долго не мог понять, почему у меня не меняется запись в поле таблицы modx 3, при вызове стандартного modx->save().

 В чем суть, из своей панельки extjs я, нажав на кнопку "запретить", должен передать в таблицу значение 1 в поле banlist. для этого я использовал стандартное  extends Processor и this->modx->getObject , ->set , ->save() . Однако же значение не менялось и ошибок не было. после долгого ковыряния я узнал, что есть такое замечательное как $this->modx->setDebug(true); с помощью этой команды, в логи пишется абсолютно все и можно найти ошибку при выполнении запроса save.

use MODX\Revolution\Processors\Processor;
class BanlistProcessor extends Processor {
public $classKey = 'Table_class';
public $primaryKeyField = 'id_name';
public function process()
{
$id_get = $this->getProperty('id_name');
$Ban_Update = $this->modx->getObject($this->$classKey, array('id_name' => $id_get));
if ($Ban_Update) {
$Ban_Update->set('ban', '1');
$this->modx->setDebug(true); //неожиданный дебаг
if ($Ban_Update->save() === false) {
$errors = $this->modx->error->errors;
$errorMessage = 'Ошибка при обновлении объекта: ' . print_r($errors, true);
return $this->failure($errorMessage);
} else {
return $this->success('Запись успешно обновлена', $Ban_Update);
}
} else {
return $this->failure('error');
}
return 'BanlistProcessor';

Это позволило мне узнать, что я не прописал в файле table.map.inc.php, что у меня нестандартный primary key (id_name я назвал для примера, в общем поле уникальное (unique) , но не автоинкрементное).  

исправляем

 Сразу оговорюсь, возможны ошибки в описании полей

$xpdo_meta_map['Table_class'] = array(
'package' => 'MyPackage',
'version' => '1.0',
'table' => 'real_table_name',
'extends' => 'xPDOObject', //внимание. Не xPDOSimpleObject
'fields' =>
array(
'id_name' => null,
'ban' => null,
),'indexes' =>
array (
'id_name' =>
array (
'alias' => 'id_name',
'type' => 'BTREE',
'columns' =>
array (
'id_name' =>
array (
'length' => '20',
'collation' => 'A',
'null' => false,
),
),
'primary' => true,
)
),
'fieldMeta' =>
array(
'id_name' =>
array(
'dbtype' => 'int',
'precision' => '20',
'phptype' => 'string',
'null' => true,
'default' => null,
),
'ban' =>
array(
'dbtype' => 'text',
'phptype' => 'string',
'null' => true,
'default' => null,
),
)
);

 Вроде бы все работает и все теперь обновляется. на часах 2-30 ночи, можно допивать кофе и спать. 

 ОБЯЗАТЕЛЬНО потом не забыть убрать $this->modx->setDebug(true); или $this->modx->log(1,'сообщения'); , которые использовались для отладки.

 

Похожее

draw I
draw I
draw I
draw I

 quote a81ca

Если вдруг вам было здесь полезно, уютно и приятно, что захотелось меня отблагодарить - вы можете пожертвовать мне на кофе.

 

i

Будет осуществлен переход на сайт Yoomoney

 

draw I

 


Внимание: На сайте могут присутствовать ссылки ePN

Мини-портфолио

очередной бесполезный блог