2017-10-27 20 views
0

私のフォームには、XMLファイルをアップロードするためのフィールドがあります。しかし、XMLを提出する前に、私はそれを検証しなければなりません。これに対して検証関数を作成するにはどうすればよいですか?Yii2:提出する前にファイルの内容を確認する

マイビュー:

... 
<?= $form->field($model, 'upload_file')->fileInput(['accept' => 'text/xml']) ?> 
... 

マイモデル:

... 
['upload_file', 'validateFile'], 
... 
public function validateFile($attribute, $params) 
{ 
// TODO 
} 
... 

私がアクセスし、コントローラでのXMLファイルの内容を検証しますが、ファイルが提出された後に、この検証がすでにあることができます。 ..私は提出する前に欲しかった!コントローラで Exemple:

if ($model->load(Yii::$app->request->post()) { 
    $file = UploadedFile::getInstance($model, 'upload_file'); 
    $file = file_get_contents($file->tempName); 
    // xml of the upload_file 
    $xml = simplexml_load_string($file); 

私は、検証機能に、一番上にあるこのコードを渡したいです。

+0

を私は「のActiveForm」で「validationUrl」を使用しようとしたが、それは、ファイル、テキストだけを送信しません。 – Giest

+0

フロントエンドサイトでは検証できません。 fileInputはhtmlタグのみなので、必要な場合はjavascriptコードを追加する必要があります。だから私はYii2ファイル入力を使用することをお勧めします、それはより多くの機能とウィジェットを強化しました。ここはhttps://github.com/kartik-v/yii2-widget-fileinputです – dungphanxuan

答えて

0

モデル規則にこれを追加します。

public function rules() 
{ 
    return [ 
      [['uploaded_file'], 'file', 'skipOnEmpty' => false, 'extensions' => 'xml', 'mimeTypes' => 'text/xml, application/xml'], 
    ]; 
} 
関連する問題