我有一个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
及其值。
答案 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];