편집 모드에서 백엔드의 사용자 정의 구성 요소에서 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();
}
트릭을 수행해야합니다. $ file 배열은 다음 키를 보유합니다. 오류 이름 크기 tmp_name 유형 – user4592263