Ethnaのアクションフォームを抜き出してみた
<?php function searchActionFormData( $file ){ $data = cut_comments( file_get_contents($file) ); $action = array(); // 親クラス preg_match('/_Form_(.*?) extends (.*?){/s', $data, $match); $action['extends'] = trim( $match[2] ); // 設定取得 preg_match('/\$form(.*?)\);/s', $data, $match); eval( $match[0] ); $action['form'] = $form; // リターン先 preg_match('/_ActionClass(.*)}/s', $data, $match); preg_match_all('/return (.*?);/', $match[1], $match); $list = array(); foreach( $match[1] as $item ){ // 入らないものを削除 $item = str_replace( "'", '', $item ); $item = str_replace( '"', '', $item ); // null以外は追加 if( strtolower( $item ) != 'null' ){ $list[] = $item; } } // 重複を取り除いてソートしてリターン先を代入 $list = array_unique( $list ); sort( $list ); $action['return'] = $list; return $action; }
アクションの一覧を取り出したときに正規表現で解析しています。__ethna_info__を見るとちゃんと解析しているのですがある程度さっくりと。。。
アクションフォームは $form を取り出してきて、禁断の eval 関数を利用しています。リターン先は適当な解析なので prepare と perform を分離していません。本当は phpdoc の解析も一緒にやる方がいいですね。。。
この解析結果はとりあえず YAML に変換して一番下に表示しています。
土日はほとんど作業してないからあまり進んでいないや。。。本当はエクセルとかhtmlに出力するところまでやりたかったんですけれどね。