2016-11-02 14 views
0

私は1つのフィールド(age)が別のフィールド(birthdate)に依存することを意図したCaseBoxオブジェクトを持っています。開発者のドキュメントを理解するにあたり、タイプObjectsageを作成し、サーバー側の関数を記述し、プロパティのsource要素をageに設定して、関数とフィールドを渡す必要があります。同じ親オブジェクト内の別のフィールドに依存するCaseboxオブジェクトフィールド

ageフィールドのための私の設定:

{ 
    "source": { 
     "requiredFields": "birthdate" 
     ,"fn":"Casebox\\CoreBundle\\Service\\Util\\Utility.calculateAge" 
    } 
    ,"readOnly": "true" 
    ,"autoLoad": "true" 
} 

私は独立してcalculateAge()を検証してきました。スカラー値を受け取り、必要に応じてDateTimeを作成し、年単位のdiffを実行します。それでその部分は機能します。

ただし、ageは自動的に設定されません。 Browser.php内部

[2016-11-02 17:57:18] request.INFO: Matched route "app_remote_router". {"route_parameters":{"_controller":"Casebox\RpcBundle\Controller\RpcApiController::routeAction","coreName":"demotwo","_route":"app_remote_router"},"request_uri":" http://192.168.33.3.xip.io/c/demotwo/remote/router "} []

[2016-11-02 17:57:18] security.DEBUG: Read existing security token from the session. {"key":"_security_main"} []

[2016-11-02 17:57:18] security.DEBUG: User was reloaded from a user provider. {"username":"root","provider":"Symfony\Bridge\Doctrine\Security\User\EntityUserProvider"} []

[2016-11-02 17:57:18] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\FatalThrowableError: "Function name must be a string" at /var/www/casebox/vendor/caseboxdev/core-bundle/src/Service/Browser.php line 443 {"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code: 0): Function name must be a string at /var/www/casebox/vendor/caseboxdev/core-bundle/src/Service/Browser.php:443)"} []

[2016-11-02 17:57:18] security.DEBUG: Stored the security token in the session. {"key":"_security_main"} []

、私は私が見つけることができるすべてのデータをログに記録:私はageフィールドを入力したとき、私は、コアログファイルに次のエントリを取得します。問題の行(現在443)は、元のCaseBoxディストリビューションから修正されておらず、パラメータをターゲットに渡します。私が見つけたのは、すべてというパラメータを配列として渡すことです。

最終的には私の方法では配列を受け入れ、手動でbirthdateとその値を見つける必要があると私は推測しています。

答えて

0

私の推測は部分的に正しいと思われました。私はそうのようなcalculateAgeを変更:

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

    //...proceed with calculation... 

2番目の部分は、私の同僚が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];