Casebox对象字段取决于同一父对象中的另一个字段

时间:2016-11-02 18:25:03

标签: php ajax symfony

我有一个CaseBox对象,其中一个字段(age)打算依赖另一个字段(birthdate)。据我了解开发人员文档,我应该age类型为Objects,编写服务器端函数,并在{{1}上设置config属性的source元素传递函数和字段。

age字段的配置:

age

我已独立验证{ "source": { "requiredFields": "birthdate" ,"fn":"Casebox\\CoreBundle\\Service\\Util\\Utility.calculateAge" } ,"readOnly": "true" ,"autoLoad": "true" } ;它接受标量值,如果需要,可以从中生成calculateAge(),并且基于年份DateTime。这部分有效。

diff不会自动填充。当我输入age字段时,我在核心日志文件中收到以下条目:

  

[2016-11-02 17:57:18] request.INFO:匹配路由“app_remote_router”。   { “route_parameters”:{ “_控制器”: “Casebox \ RpcBundle \控制器\ RpcApiController :: routeAction”, “coreName”: “demotwo”, “_路线”: “app_remote_router”}, “REQUEST_URI”:“http://192.168.33.3.xip.io/c/demotwo/remote/router “}   []

     

[2016-11-02 17:57:18] security.DEBUG:读取现有的安全令牌   来自会议。 {“key”:“_ security_main”} []

     

[2016-11-02 17:57:18] security.DEBUG:用户是从用户重新加载的   供应商。   { “用户名”: “根”, “提供者”: “Symfony的\桥\原则\安全\用户\ EntityUserProvider”}   []

     

[2016-11-02 17:57:18] request.CRITICAL:未捕获PHP异常   Symfony \ Component \ Debug \ Exception \ FatalThrowableError:“函数名称   必须是一个字符串“at   /var/www/casebox/vendor/caseboxdev/core-bundle/src/Service/Browser.php   第443行{“例外”:“[对象]   (Symfony \ Component \ Debug \ Exception \ FatalThrowableError(代码:0):   函数名必须是字符串   /var/www/casebox/vendor/caseboxdev/core-bundle/src/Service/Browser.php:443)“}   []

     

[2016-11-02 17:57:18] security.DEBUG:存储安全令牌   会话。 {“key”:“_ security_main”} []

age内,我记录了我能找到的所有数据。有问题的行(目前为443)未从原始CaseBox发行版中修改,并将参数传递给目标。我发现它将全部参数作为数组传递。

所以最终我的猜测是我的方法需要接受一个数组,并手动查找Browser.php及其值。

1 个答案:

答案 0 :(得分:0)

我的猜测是部分正确的。我改变了calculateAge

function calculateAge(&$p) { 
    if (!empty($p['objFields']['birthdate'])) {
        $birthday = $p['objFields']['birthdate'];
    }
    else {
        return 0;
    }

    //...proceed with calculation...

第二部分是我的同事修复了CaseBox源文件。相关的块是:

$method = explode('.', $fieldConfig['source']['fn']);
$class = new $method[0]();
$rez = $class->$method[1];

新代码有效地将方法名称从数组转换为字符串:

$method = explode('.', $fieldConfig['source']['fn']);
$class = new $method[0]();
$rez = $class->$method[1];