2015-05-29 4 views
0

Я использую cakephp 2x. У меня возникла проблема в поле загрузки изображения для редактирования страницы. Каждый раз, когда я пытаюсь редактировать страницу своего профиля, он показывает поле загрузки изображения пустым. Другие данные полей остаются такими же, как заполнение формы добавления профиля, но поле изображения не позволяет извлекать сохраненное изображение. Я новичок в cakephp, если кто-нибудь знает, как я могу получить изображение? PLZ помочь! И я также хочу знать, как я могу хранить больше одного изображения, а также проверять, что одно и то же изображение не загружается дважды. Благодаря! Вот мой код загрузки изображения->при редактировании поля для загрузки файла пусто

// File upload function in Model.php 
     public $validate = array( 
     'image' => array(
     'uploadError' => array(
      'rule' => 'uploadError', 
      'message' => 'Something went wrong with the file upload', 
      'required' => FALSE, 
      'allowEmpty' => TRUE, 
     ), 
     // http://book.cakephp.org/2.0/en/models/data- validation.html#Validation::mimeType 

     // custom callback to deal with the file upload 
     'imageOne' => array(
      'rule' => 'imageOne', 
      'message' => 'Something went wrong processing your file', 
      'required' => FALSE, 
      'allowEmpty' => TRUE, 
      'last' => TRUE, 
     ), 
    ), 
    ); 


public function imageOne($check=array()) { 
    // deal with uploaded file 
    if (!empty($check['image']['tmp_name'])) { 

     // check file is uploaded 
     if (!is_uploaded_file($check['image']['tmp_name'])) { 
     return FALSE; 
     } 

    // build full filename 
    $filename = WWW_ROOT . $this->uploadDir . DS . Inflector::slug(pathinfo($check['image']['name'], PATHINFO_FILENAME)).'.'.pathinfo($check['image']['name'], PATHINFO_EXTENSION); 

    // @todo check for duplicate filename 
/* if (!file_exists($check['image']['tmp_name'],$filename)) { 
    echo "Sorry, file already exists."; 

    }*/ 
    // try moving file 
    if (!move_uploaded_file($check['image']['tmp_name'], $filename)) { 
     return FALSE; 

    // file successfully uploaded 
    } else { 
     // save the file path relative from WWW_ROOT e.g.  uploads/example_filename.jpg 
     $this->data[$this->alias]['filepath'] = str_replace(DS, "/",  str_replace(WWW_ROOT, "", $filename)); 
    } 
} 

return TRUE; 
} 


    public function beforeSave($options = array()) { 
    // a file has been uploaded so grab the filepath 
    if (!empty($this->data[$this->alias]['filepath'])) { 
    $this->data[$this->alias]['image'] = $this->data[$this->alias] ['filepath']; 
} 


    // Controller.php 

    public function edit($id = null) { 
    if (!$this->CollegeProfile->exists($id)) { 
     throw new NotFoundException(__('Invalid college profile')); 
    } 
    if ($this->request->is(array('post', 'put'))) { 
      $this->request->data['CollegeProfile']['user_id'] = $this->Auth- >user('id'); 
     $this->request->data['CollegeProfile']['id'] = $id; 
     if ($this->CollegeProfile->save($this->request->data)) { 
      $this->Session->setFlash(__('The college profile has been saved.'), 'default', array('class' => 'alert alert-success')); 
      return $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash(__('The college profile could not be saved. Please, try again.'), 'default', array('class' => 'alert alert-danger')); 
     } 
    } else { 
     $options = array('conditions' => array('CollegeProfile.' . $this->CollegeProfile->primaryKey => $id)); 
     $this->request->data = $this->CollegeProfile->find('first', $options); 
    } 
    $this->loadModel('State'); 
    $states = $this->State->find('list'); 
    $this->set(compact('states')); 
} 

//Edit.ctp 
<div class="form-group"> 
      <?php echo $this ->Form->input('image',array('class'=>'form-control','type'=>'file'));?> 
      </div> 

ответ

0

Невозможно сделать это.

См. Соответствующий вопрос: Dynamically set value of a file input.

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

Однако, в интересах отображения пользователем того, что они выбрали последним, вы можете сделать что-то подобное;

<?php 
// edit.ctp 
if (!empty($this->request->data['Model']['image'])) { 
    $label = "Current file: " . $this->request->data['Model']['image']; 
} else { 
    $label = __("Select file"); 
} 
echo $this->Form->input('Model.image', array('type' => 'file', 'label' => $label)); 
+0

Да, @ Robmcvey, Моя форма редактирования включает в себя файл type =>. – skye

+0

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

0

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

$data=$this->Option->findById(1); 

//pic slide1 

$slide1=$this->image($this->request->data['Option']['slide1']);(this is the upload) 
if($slide1){ $this->request->data['Option']['slide1']=$slide1; }else{$this->request->data['Option']['slide1']=$data['Option']['slide1'];} 

В этом случае у меня есть «функция изображения», которая возвращает имя загрузки, так что если имя пустое я установить запрос данных значение Pic1 с $ значения массива данных я извлекаться до того ,

Смежные вопросы