Codeigniter: как загрузить более одного файла (не входной массив []) и вернуть текущий путь к файлу - PullRequest
0 голосов
/ 10 марта 2020

Я новичок в codeigniter, и у меня есть форма с 3 входными файлами, которые я должен загрузить и получить их путь, каким-то образом я не могу понять, как это сделать в codeigniter

вот часть моей формы

<?php echo form_open_multipart('drivers/create');?>
 ............................
..............................
..............................
<div class="form-group">
  <label for="">Passport</label>
  <input class="form-control" type="file" name="passport" value="">
</div>
<div class="form-group">
  <label for="">Driving license</label>
  <input class="form-control" type="file" name="driving_license" value="">
</div>
<div class="form-group">
  <label for="">Cv</label>
  <input class="form-control" type="file" name="cv" value="">
</div>

Чем в моем контроллере у меня есть 2 функции create () и upload_image () в функции create, я пытаюсь вызвать upload_image () для получения пути каждого входного файла

вот мой create ()

        if ($_FILES['passport']) {
        $passport = $this->upload_image($_FILES['passport']);
    }
    if ($_FILES['driving_license']) {
        $driving_license = $this->upload_image($_FILES['driving_license']);
    }
    if ($_FILES['cv']) {
        $cv = $this->upload_image($_FILES['cv']);
    }

if ($this->form_validation->run() == TRUE) {
        $data = array(
            'name'                          => $this->input->post('name'),
                    'email'                 => $this->input->post('email'),
                    'phone'                 => $this->input->post('phone'),
                    'address'               => $this->input->post('address'),
                    'sort_code'             => $this->input->post('sort_code'),
                    'bank_account'          => $this->input->post('bank_account'),
                    'passport_id'           => $passport,
                    'driving_license'       => $driving_license,
                    'cv'                    => $cv
        );

        $create = $this->model_drivers->create($data);
   }

здесь я сталкиваюсь с проблемой для upload_image (), как сделать для каждого переданного файла возвращаемый путь?

public function upload_image($name = array()){
  ..................
  ...................
    $config['upload_path'] = 'assets/drivers';
    $config['file_name'] =  uniqid();
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '1000';

        $data = array('upload_data' => $this->upload->data());


        $type = explode('.', $name['name']);

        $type = $type[count($type) - 1];

        $path = $config['upload_path'].'/'.$config['file_name'].'.'.$type;
        return ($data == true) ? $path : false;            

1 Ответ

1 голос
/ 10 марта 2020

Попробуйте передать массив файлов и имя файла в функцию:

if ($_FILES['cv']) {
        $cv = $this->upload_image($_FILES['cv'], 'cv');
    }

И добавить настройки загрузки перед $data = array('upload_data' => $this->upload->data()); в измененной функции:

public function upload_image($file = array(), $name = ''){
  ..................
  ...................
    $config['upload_path'] = 'assets/drivers';
    $config['file_name'] =  uniqid();
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '1000';

        $this->load->library('upload');
        $this->upload->initialize($config);
        $this->upload->do_upload($name);

        $data = array('upload_data' => $this->upload->data());

        $type = explode('.', $file['name']);

        $type = $type[count($type) - 1];

        $path = $config['upload_path'].'/'.$config['file_name'].'.'.$type;
        return ($data == true) ? $path : false;      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...