0

2つの異なる寸法要件を持つ2つの画像をアップロードしています。

検証ルールが設定されると、2番目のパラメーター(CIドキュメントによると「人間が読める」フィールド)が設定されます。カスタム検証コールバック関数を使用して画像検証を処理します(設定を設定し、upload-> do_upload()を呼び出します)。返されるエラーメッセージは、一般的な「アップロードしようとしている画像が最大の高さまたは幅を超えています」です。

検証対象のフィールドの人間が読める名前(「画像1」や「画像2」など)を渡して、ユーザーがどのエラーメッセージがどの画像アップロードフィールドに関連しているかを知るにはどうすればよいですか?

編集:部分的な解決策を考え出しました:検証set_messageの前にフィールド名を付けることで、エラーを見出しの下にグループ化できるようになりました。しかし、問題は今では異なります。カスタム検証関数は、パラメーターが異なる各画像で同じですが、両方にエラーメッセージがある場合、2番目のグループにはそれ自体と前の両方が表示されます。

たとえば、画像1のファイルサイズが大きすぎます。画像2が広すぎます。画像2のエラーメッセージは、ファイルサイズが大きすぎて幅が広すぎることを示しています。

このためだけに関数を複製したくはありません...

4

1 に答える 1

0

私は過去に似たようなものだと思うものに出くわしました。

アップロードされたファイルをループしている場合、$configファイルごとに異なる場合は、反復ごとにアップロード クラスを初期化する必要があります。

$this->upload->initialize( $config );

ペーストビンなどのコード サンプルはありますか?

これは、ファイルの種類に応じて $config の変更を処理するために以前のプロジェクトで行ったことです。

if( $_FILES ) { $this->load->library('アップロード');

foreach ( $_FILES as $key => $value )
{
    $file_type = ( $key == 'image' ) ? 'image' : 'document';

    if( ! empty( $value['name'] ))
    {
        $config = array(
            'upload_path'   => './uploads/materials/' . strtolower($material['code']) . '/',
            'allowed_types' => ($file_type == 'image') ?  'jpg|jpeg|png' : 'jpg|jpeg|png|pdf',
            'max_size'      => 1024 * 10,
            'max_width'     => 19200,
            'max_height'    => 12800,
            'overwrite'     => TRUE,
        );

        // ------------------------------------------------------------------------
        // Here is the key idea: You need to initialize each time you change the $config
        // ------------------------------------------------------------------------
        $this->upload->initialize( $config );

        if( $this->upload->do_upload( $key ))
        {
            //Success! Files are all uploaded.
            $uploaded = $this->upload->data();

            $data['file_data'] = array(
                'parent_id'         => $data['material']->id,
                'filename'          => $uploaded['file_name'],
                'filename_original' => $uploaded['client_name'],
                'type'              => $file_type,
                'location'          => $config['upload_path'],
                'description'       => '',
            );

            // Add the file details to the database
            $this->material->add_material_file( $data );
        }
        else
        {
            // ERROR! Something went wrong... alert the user.
            $errors = $this->upload->display_errors();
            $this->session->set_flashdata( 'flashError', $errors );
        }
    }
}

}

于 2013-02-02T00:48:16.017 に答える