Changeset 23567


Ignore:
Timestamp:
2014/07/10 00:15:52 (10 years ago)
Author:
shutta
Message:

#2591 (SC_FormParam::recursionCheck()の2次元以上の配列への対応)
2次元以上の配列へ対応。
また、危険なevalを使用しないようにも改修。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_13-dev/data/class/SC_FormParam.php

    r23565 r23567  
    231231                    case 'NUM_POINT_CHECK': 
    232232                        $this->recursionCheck($this->disp_name[$index], $func, 
    233                             $value, $arrErr, $key, $this->length[$index]); 
     233                            $value, $arrErr[$key], $this->length[$index]); 
     234                        if (SC_Utils_Ex::isBlank($arrErr[$key])) { 
     235                            unset($arrErr[$key]); 
     236                        } 
    234237                        break; 
    235238                    // 小文字に変換 
     
    268271     * 再帰実行した場合は, エラーメッセージを多次元配列で格納する 
    269272     * 
    270      * TODO 二次元以上のエラーメッセージへの対応 
    271      * 
    272      * @param  string  $disp_name      表示名 
    273      * @param  string  $func           チェック種別 
    274      * @param  mixed   $value          チェック対象の値. 配列の場合は再帰的にチェックする. 
    275      * @param  array   $arrErr         エラーメッセージを格納する配列 
    276      * @param  string  $error_key      エラーメッセージを格納する配列のキー 
    277      * @param  integer $length         チェック対象の値の長さ 
    278      * @param  integer $depth          再帰実行した場合の深度 
    279      * @param  integer $error_last_key エラーメッセージを格納する配列の末端のキー 
     273     * @param  string  $disp_name 表示名 
     274     * @param  string  $func      チェック種別 
     275     * @param  mixed   $value     チェック対象の値 
     276     *                            配列の場合は再帰的にチェックする 
     277     * @param  array   $arrErr    エラーメッセージを格納する配列(の一部) 
     278     * @param  integer $length    チェック対象の値の長さ 
    280279     * @return void 
    281280     */ 
    282     public function recursionCheck($disp_name, $func, $value, &$arrErr, $error_key, 
    283         $length = 0, $depth = 0, $error_last_key = null 
     281    public function recursionCheck($disp_name, $func, $value, &$arrErr, 
     282        $length = 0 
    284283    ) { 
     284        // 配列の場合は、再帰実行 
    285285        if (is_array($value)) { 
    286             $depth++; 
    287286            foreach ($value as $key => $in) { 
    288                 $this->recursionCheck($disp_name, $func, $in, $arrErr, $error_key, 
    289                                       $length, $depth, $key); 
    290             } 
    291         } else { 
    292             $objErr = new SC_CheckError_Ex(array(($error_last_key ? $error_last_key : $error_key) => $value)); 
    293             $objErr->doFunc(array($disp_name, ($error_last_key ? $error_last_key : $error_key), $length), array($func)); 
    294             if (!SC_Utils_Ex::isBlank($objErr->arrErr)) { 
    295                 foreach ($objErr->arrErr as $message) { 
    296                     if (!SC_Utils_Ex::isBlank($message)) { 
    297                         // 再帰した場合は多次元配列のエラーメッセージを生成 
    298                         $error_var = '$arrErr[$error_key]'; 
    299                         for ($i = 0; $i < $depth; $i++) { 
    300                             // FIXME 二次元以上の対応 
    301                             $error_var .= '[' . $error_last_key . ']'; 
    302                         } 
    303                         eval($error_var . ' = $message;'); 
    304                     } 
    305                 } 
    306             } 
     287                $this->recursionCheck($disp_name, $func, $in, $arrErr[$key], 
     288                                      $length); 
     289                if (SC_Utils_Ex::isBlank($arrErr[$key])) { 
     290                    unset($arrErr[$key]); 
     291                } 
     292            } 
     293            return; 
     294        } 
     295 
     296        $dummy_key = 'dummy'; // 仮のキーを指定。どんな値でも良い。 
     297        $objErr = new SC_CheckError_Ex(array($dummy_key => $value)); 
     298        $objErr->doFunc(array($disp_name, $dummy_key, $length), array($func)); 
     299        if (!SC_Utils_Ex::isBlank($objErr->arrErr[$dummy_key])) { 
     300            $arrErr = $objErr->arrErr[$dummy_key]; 
    307301        } 
    308302    } 
Note: See TracChangeset for help on using the changeset viewer.