2017-05-10 4 views
0

양식의 파일을 내 응용 프로그램 폴더 (public/img/clientes /)에 업로드하고 싶습니다.
내 양식 파일 업로드 필드 :파일을 응용 프로그램 폴더에 업로드 - 젠드 프레임 워크 3

$this->add(array(
     'name' => 'foto', 
     'attributes' => array(
      'type' => 'file', 
     ), 
     'options' => array(
      'label' => 'Logo da empresa:', 
     ), 
    )); 

컨트롤러 내 추가 조치 기능 : 나는 그 이유를 찾기 위해 솔기를 캔트

public function addAction() 
{ 

    $form = new ClienteForm(); 


    if ($this->getRequest()->isPost()) { 


     $data = $this->params()->fromPost(); 

     $form->setData($data); 
     if ($form->isValid()) { 
      $data = $form->getData(); 

      $name = $data['foto']; 
      if(isset($name)){ 
       if(!empty($name)){ 
        $location = __DIR__."../../../public/img/clientes/"; 
        if(!move_uploaded_file($name, $location)){ 
         return $this->redirect()->toRoute('home'); 
        } 
       } 
      } 
      $this->clienteManager->addNewCliente($data); 

      return $this->redirect()->toRoute('clientes'); 
     } 
    } 
    return new ViewModel([ 
     'form' => $form 
    ]); 
} 

사람이 좀 도와 수 있다면하지
을 작업 여기 해결책은 매우 감사 할 것입니다.

답변

2

모든 것이 여기 자체 설명입니다. 업로드 위치가 약간 이상합니다. 모든 요청은 ZF가 index.php을 통해 처리하므로이 파일은 chdir(dirname(__DIR__)) 메서드를 사용하여 상위 레벨로 이동하므로 모든 것이 응용 프로그램 루트에 상대적입니다. 그렇기 때문에 직접 public/img/clientes에 액세스 할 수 있습니다. 그러나 권장 설정은 module.config.php의 구성을 통해 설정됩니다. ServiceManager를 사용하여 사용 가능하게 만듭니다.

업로드 디렉토리에 올바른 권한이 있는지 확인하십시오.

... 

if ($this->getRequest()->isPost()) { 

    // Merge data thus 
    $data = array_merge_recursive(
     $this->getRequest()->getPost()->toArray(), 
     $this->getRequest()->getFiles()->toArray() 
    ); 

    $form->setData($data); 

    if ($form->isValid()) { 

     $data = $form->getData(); 

     // Upload path 
     $location = "public/img/clientes/"; 

     // A bit validation of uploaded file 
     $allowedExtension = array('jpg', 'jpeg', 'png'); 

     $extension = explode('.', $data['foto']['name']); 
     $extension = end($extension); 
     $fileName = time() . '.' . $extension; 

     // Check if everything is OK! 
     if (0 === $data['foto']['error'] && in_array($extension, $allowedExtension)) { 
      move_uploaded_file($data['foto']['tmp_name'], $location . $fileName); 
     } else { 
      echo 'Something went wrong!'; 
     } 
    } 
} 

... 
+0

잘 설명 된 답변에 감사드립니다. 그 지금 일하고있어. –

+0

당신은 환영합니다! – unclexo