ethna の regexp チェックは VAR_TYPE_FILE属性の時は効かないので custom で実装してみる。
class APPID_ActionForm extends Ethna_ActionForm{
var $form_template = array(
'uploadName' => array(
'name' => 'アップロードファイル',
'required' => false, /// 各アクションフォームで必須に
'form_type' => FORM_TYPE_FILE,
'type' => VAR_TYPE_FILE,
'max' => '10000', /// 10000KBまで
'custom' => 'checkFile',
'extension' => array( 'zip', 'lzh' ),
'regexNG' => '[^\.a-z0-9_-]+',
'regexp_error' => 'ファイル名に禁止文字が含まれています',
),
...
);
...
/**
* カスタムチェックメソッド: アップロードファイルをチェックする
* 拡張子制限
* 禁止文字正規表現制限
*
* @access public
* @param string $name フォーム項目名
* @return object Ethna_Error エラーオブジェクト(エラーが無い場合はnull)
*/
function &checkFile( $name ){
$form_vars = $this->check( $name );
if ($form_vars == null) {
return null;
}
/// 拡張子制限
$fileRequest = $_FILES[$name]['name'];
if( array_key_exists( 'extension', $this->form[$name] ) ){
$extension = $this->form[$name]['extension'];
if( ! eregi( '('.implode(')|(',$extension).')$', $fileRequest ) ){
return $this->action_error->add( $name, "{form}は拡張子「".implode('」「',$extension)."」形式のみです" );
}
}
/// 禁止文字正規表現制限
if( array_key_exists( 'regexNG', $this->form[$name] ) ){
$regexNG = $this->form[$name]['regexNG'];
if( array_key_exists( 'regexp_error', $this->form[$name] ) ){
$regexp_error = $this->form[$name]['regexp_error'];
}
if( eregi( $regexNG, $fileRequest ) ){
return $this->action_error->add( 'uploadName', $regexp_error, E_FORM_REGEXP );
}
}
return null;
}
}
あとは、各アクションで