MODx第二个runProcessor返回第一个的响应

瓦莱里亚·维亚纳·古斯芒(Valeria Viana Gusmao)

您好,并预先感谢您的任何帮助!所以问题是:我在插件中运行2个不同的处理器-我正在创建一个用户(安全性/用户/创建)并创建其他信息对象(我的自定义类)。问题在于第二个处理器总是返回第一个处理器的响应。如果我删除第一个处理器调用-很好。当我尝试在第二个处理器本身中执行相同的操作时,问题是相同的。因此代码如下:

$response = $modx->runProcessor('security/user/create',$_REQUEST);
$resp=$modx->runProcessor('mgr/userdata/create',$_REQUEST,array("processors_path"=>$custom_path));
$modx->log(MODx::LOG_LEVEL_ERROR,print_r($resp->response,true));

返回值:

 [2014-11-21 01:01:44](错误@ /index.php)数组
    [成功] => 
    [消息] => 
    [总计] => 1
    [错误] =>数组
            [0] =>数组
                    [id] =>用户名
                    [msg] =>此用户名已被使用!


    [对象] =>数组

这是什么巫术,如何使它起作用?

罗加尔德

MODX的处理器正在使用公共$modx->error对象。在登录时,我们在创建用户时出错。第二个处理器抓住了它,但无法成功完成。

这全都是因为$ modx-> error在所有处理器中都是常见的。最简单的方法是$modx->error->reset在第一个处理器调用之后使用

但是,如果我们走得更深呢?

您要为他创建用户和相关数据吗?好的。但是,如果用户创建成功并且您的自定义数据创建失败怎么办?最后,我们的数据不一致。真是头疼。

对我而言,最好的方法是创建可扩展的自定义处理器security/user/create processor有特殊的beforeSave方法。因此,您可以了解用户创建成功的时间,然后创建您的自定义数据。真的很棒 示例(它是我的一个项目中的处理器,与用户创建无关。但是含义相同):

class modWebOrdersOrdersBulkComplectationCompleteProcessor extends modWebOrdersOrdersUpdateProcessor{


public function beforeSave(){

    $canSave = parent::beforeSave();
    if($canSave !== true){
        return $canSave;
    }    

    // if we are here user creating has no errors.

    // method for my additional logic. If i have errors there user won't be created
    $ok = $this->transactionCreate();
    if($ok !== true){
        return $ok;
    }


    return true;
}

protected function transactionCreate(){          

    // i'm usually works with related objects and use especially aggregates/composites relations. So if user has related data profile it will be saved when `save` method will be called for $this->object.

    $_Transaction = $this->modx->newObject('BillingProductTransaction', array(
        'createdby' => $this->modx->user->id,
        'cause'=>   2
    ));

    $this->object->Transaction = $_Transaction;

    // but anyway you can run your subprocessor there. But there are some cons
    // 1. $this->modx->error is common. if you make multiple runProcessor call there you can get some weird problems with logic. (error->reset() is hack not feature)
    // 2. when your project architecture grows logic based on relations becomes more maintainable.

    return true;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

第二个 if 语句返回结果,第一个 if 语句不返回

如何根据第一个响应进行第二个API调用?

查找第一个值并返回列表中的第二个值

Django 在返回第一个请求之前执行第二个请求

根据第二个值返回数组的第一个值

WPF-从第二个窗口返回第一个窗口

映射到Axios响应并将第二个Axios响应附加到第一个

如果第一个不返回任何内容,则运行第二个查询;如果第一个返回行,然后返回该行

比较两个熊猫列,并返回与第二个元素匹配的第一个的索引

得到第一个请求的响应后,调用第二个改造请求

针对相同的第一个请求在第二个响应中声明json参数值

当浏览器响应时,强制第二个Div在第一个Div之下折叠

来自第一个响应的AngularJS变量没有传递给第二个请求?

axios调用从第一个api获取响应并传递到第二个api

Tkinter的第一个单击第一个功能,第二个单击第二个功能

隐藏第一个按钮点击显示第二个,隐藏第二个点击显示第一个按钮

返回作为第二个参数传递的数组中第一个参数的索引的函数

如果第一个SELECT返回0行,则第二个SELECT查询

当第一个选择查询返回0时,从第二个选择查询获取结果

Java Array嵌套用于循环,不清除第二个以返回第一个

第二个评估后的Swift合并第一个未来的返回结果

如果第一个查询什么都不返回,如何执行第二个查询?

当第一个参数大于第二个参数时,range()返回空列表

第一个可观察的返回在第二个它们有不同的超时之后

返回 INNER JOIN SQL 中第二个表的第一个索引

合并两个画布。把第一个放在第二个

执行2个mysql查询,第二个基于第一个

替换R中第一个出现的“:”,而不是第二个

python matplotlib,第二个 y 轴与第一个核对