CodeIgniter - проверка формы и данные загрузки файла - PullRequest
8 голосов
/ 03 марта 2011

Мне было интересно, есть ли способ проверить размер файла с помощью класса проверки формы в CodeIgniter 2.0.У меня есть форма, содержащая ввод файла, и я хочу сделать что-то вроде этого:

$this->form_validation->set_rule('file', 'File', 
                 'file_type[image/jpeg|image/gif|image/png]|file_max_size[500]');

Я думал о расширении класса проверки, чтобы объединить его с классом загрузки и проверить на основе данных загрузки, ноэто может занять много времени.

Кто-нибудь знает о каких-либо расширениях для класса проверки формы, который мог бы сделать что-то подобное?

Ответы [ 2 ]

10 голосов
/ 03 марта 2011

Класс загрузки файлов на самом деле имеет свой собственный набор правил проверки, которые вы можете установить так:

$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';

$this->load->library('upload', $config);

(взято из CI docs)

9 голосов
/ 10 сентября 2011

У меня была такая же проблема.Я создал контактную форму, которая позволяет пользователю загружать аватар и редактировать другую информацию одновременно.Ошибки проверки формы отображаются отдельно для каждого поля.Я не мог позволить себе другую схему отображения для ввода файла и другие - у меня есть стандартный метод, который заботится об отображении ошибок.

Я использовал определенное контроллером свойство и функцию проверки обратного вызова, чтобы объединить любую загрузкуошибка с проверкой формы.

Вот выдержка из моего кода:

# controller property

private $custom_errors = array();

# form action controller method

public function contact_save()
{
    # file upload for contact avatar

    $this->load->library('upload', array(
        'allowed_types'=>'gif|jpg|jpeg|png',
        'max_size'=>'512'
    ));

    if(isset($_FILES['avatar']['size']) && $_FILES['avatar']['size']>0)
    {
        if($this->upload->do_upload('avatar'))
        {           
            # avatar saving code here

            # ...
        }
        else
        {
            # store any upload error for later retrieval
            $this->custom_errors['avatar'] = $this->upload->display_errors('', '');
        }
    }

    $this->form_validation->set_rules(array(
        array(
            'field'   => 'avatar',
            'label'   => 'avatar',
            'rules'   => 'callback_check_avatar_error'
        )
        # other validations rules here
    );

    # usual form validation here

    if ($this->form_validation->run() == FALSE)
    {
        # display form with errors
    }
    else
    {
        # update and confirm
    }

}

# the callback method that does the 'merge'

public function check_avatar_error($str)
{
    #unused $str

    if(isset($this->custom_errors['avatar']))
    {
        $this->form_validation->set_message('check_avatar_error', $this->custom_errors['avatar']);
        return FALSE;
    }
    return TRUE;
}

Примечание: поскольку входной файл не будет заполнен заново, если в других полях формы будет ошибка,при успешной загрузке я сохраняю и обновляю ее до того, как произойдет какая-либо другая проверка, поэтому пользователю не нужно повторно выбирать файл.Мое уведомление немного отличается, если это произойдет.

...