2014-12-18 6 views
1

편집 모드에서 백엔드의 사용자 정의 구성 요소에서 pdf를 업로드하려고합니다. 상태는 입니다. 1.- pdf가 올바르게 업로드되었지만 파일 이름이 인 데이터베이스에 기록되지 않았거나 2. 파일 이름이 데이터베이스에 기록되었지만 JFactory에서 pdf를 볼 수 없습니다. :: getApplication() -> 입력;사용자 정의 구성 요소 백엔드에서 Joomla 3.3 MVC 파일/pdf 업로드

내가 알고있는 것은 enctype = "multipart/form-data"가있는 것입니다. 1.- enctype = "multipart/form-data"가 들어 있고 케이스 2의 경우 을 업로드합니다 .- pdf 파일 이름이 데이터베이스에 기록됩니다. 알 수있는 사항은 무엇입니까? 나는 둘 다 필요하다.

여기 코드를 사용하면 Joomla!에서 MVC 구조를 사용하는 약간의 컴포넌트 com_job입니다! 3.3 : 여기

단지 일부 파일 관리자/구성 요소/com_job/뷰/tmpl/edit.php에 enctype = "multipart/form-data"로 여기

<form method="post" action="<?php echo JRoute::_('index.php?option=com_job&layout=edit&id='.(int) $this->item->id); ?>" id="adminForm" name="adminForm" enctype="multipart/form-data"> 

     <fieldset class="adminform"> 
     <legend><?php echo JText::_('Details'); ?></legend> 

      <div class="control-group"> 
       <div class="control-label">     
        <?php echo $this->form->getLabel('title'); ?> 
       </div> 

       <div class="controls"> 
        <?php echo $this->form->getInput('title'); ?> 
       </div> 
      </div>  

      .... 
      <div class="control-group"> 
       <div class="control-label">     
        <?php echo $this->form->getLabel('upload_pdf'); ?> 
       </div> 

       <div class="controls"> 
        <?php echo $this->form->getInput('upload_pdf'); ?> 
       </div> 
      </div> 
      ........ 

xml 파일의 부분 관리자/컴포넌트/com_job/모델/양식/job.xml

<?xml version="1.0" encoding="utf-8"?> 

...    

    <field 
     id="title" 
     name="title" 
     type="text" 
     required="true" 
     label="Title" 
     description="title_Desc" 
     class="inputbox" 
     size="40"/>      

    <field 
     id="upload_pdf" 
     name="upload_pdf" 
     type="file" 
     required="false" 
     label="Upload_pdf" 
     description="upload_pdf_Desc" 
     class="inputbox" 
     size="40" 
     accept="application/pdf"/> 

    ..... 

컨트롤러 관리자/components/com_job/controllers/job.php

jimport('joomla.application.component.controlleradmin'); 
jimport('joomla.application.component.controllerform'); 
jimport('joomla.filesystem.file'); 
jimport('joomla.filesystem.folder'); 

class JobControllerJob extends JControllerForm 
{ 
    public function save() 
    { 
     $jinput = JFactory::getApplication()->input; 
     $files = $jinput->files->get('jform', null); 

     $files['upload_pdf']['name'] = JFile::makeSafe($files['upload_pdf']['name']); 

     if (!empty($files['upload_pdf']['name'])) { 

      $pdf_path = JPATH_ROOT . '/images/upload_pdf'; 
      if (!JFolder::exists($pdf_path)) { 
       $status = JFolder::create($pdf_path); 
       if (!$status) { 
        JError::raiseWarning(100, JText::_('could not create directory pdf'), ''); 
       } 
      } 
      $file_path = JPath::clean($pdf_path . '/' . strtolower($files['upload_pdf']['name'])); 

      $status = JFile::upload($files['upload_pdf']['tmp_name'], $file_path); 
      if (!$status) { 
       JError::raiseWarning(100, JText::_('could not copy pdf'), ''); 
      } 
     } 
     return parent::save(); 
    } 
} 

여기서 오류입니까? 내가 enctype = "multipart/form-data"를 job.xml (모델)의 폼에 넣으려고했지만 작동하지 않았습니다. $의 jinput와 첫 번째 줄은 작동하지 않았다

  //$jform = $jinput->get(jform, null); 
      $pdf_filename = JFile::makeSafe($files['upload_pdf']['name']); 
      $jform = $_POST['jform']; 
      $tmp_pdf_filename = array('upload_pdf' => $pdf_filename); 
      $merged_jform = array_merge($jform,$tmp_pdf_filename); 
      $jinput->post->set('jform',$merged_jform); 

:

나는 컨트롤러의 저장 기능에, 나는이 코드를 추가, 시간적으로 해결책을 발견. $ jinput으로 여러 가지 방법을 시도했지만 아무 것도 효과가 없었습니다. 그래서 마침내 $ _POST를 직접 사용했습니다. 물론, 그것은 올바른 방법은 아니지만 적어도 작동합니다.

여기

전체 기능은 저장 :

public function save() 
{ 
    $jinput = JFactory::getApplication()->input; 
    $files = $jinput->files->get('jform', null); 

    $pdf_filename = JFile::makeSafe($files['upload_pdf']['name']); 

    if (!empty($pdf_filename)) { 

     $pdf_path = JPATH_ROOT . '/images/upload_pdf'; 
     if (!JFolder::exists($pdf_path)) { 
      $status = JFolder::create($pdf_path); 
      if (!$status) { 
       JError::raiseWarning(100, JText::_('could not create directory pdf'), ''); 
      } 
     } 
     $file_path = JPath::clean($pdf_path . '/' . strtolower($files['upload_pdf']['name'])); 

     $status = JFile::upload($files['upload_pdf']['tmp_name'], $file_path); 
     if ($status) { 
      //$jform = $jinput->get(jform, null); 
      $jform = $_POST['jform']; 
      $tmp_pdf_filename = array('upload_pdf' => $pdf_filename); 
      $merged_jform = array_merge($jform,$tmp_pdf_filename); 
      $jinput->post->set('jform',$merged_jform); 
     } else { 
      JError::raiseWarning(100, JText::_('could not copy pdf'), ''); 
     } 
    } 
    return parent::save(); 
} 

답변

0
$jinput = JFactory::getApplication()->input; 
$files = $jinput->files->get('jform'); 
$file = $files['upload_pdf']; 

보십시오이 ... 사실 방법입니다!

그 트릭을해야합니다. $ file 배열에는 다음 키가 있습니다.

error 
name 
size 
tmp_name 
type 
+0

트릭을 수행해야합니다. $ file 배열은 다음 키를 보유합니다. 오류 이름 크기 tmp_name 유형 – user4592263