チュートリアルに従って、ファイルのアップロードをうまく作成できます。また、zend チュートリアルによると、editAction は Add アクションとほぼ同じです。
editAction にファイル アップロード コードを追加しないと正常に動作しますが、ファイル アップロードを追加した後、exchangearray() でエラーが表示されます
タイプ \Model\CompanyReport のオブジェクトを \module\report\src\report\Model\CompanyReport.php 行 20 の配列として使用できません
ここにモデルファイルがあります
public function exchangeArray($data)
{
<-this is line number 20->$this->id = (isset($data['id'])) ? $data['id'] : null;
$this->title = (isset($data['title'])) ? $data['title'] : null;
$this->company = (isset($data['company'])) ? $data['company'] : null;
$this->sector = (isset($data['sector'])) ? $data['sector'] : null;
$this->report_date = (isset($data['report_date'])) ? $data['report_date'] : null;
$this->report_file = (isset($data['report_file'])) ? $data['report_file'] : null;
}
以下はeditActionコードです
public function editAction(){
$id = (int) $this->params()->fromRoute('id', 0);
if (!$id) {
return $this->redirect()->toRoute('companyreport', array(
'action' => 'add'
));
}
// Get the Album with the specified id. An exception is thrown
// if it cannot be found, in which case go to the index page.
try {
$companyreport = $this->getCompanyReportTable()->getCompanyReport($id);
}
catch (\Exception $ex) {
return $this->redirect()->toRoute('companyreport', array(
'action' => 'index'
));
}
$form = new CompanyReportForm();
$form->bind($companyreport);
$form->get('submit')->setAttribute('value', 'Edit');
$request = $this->getRequest();
if ($request->isPost()) {
$companyreport = new CompanyReport();
$form->setInputFilter($companyreport->getInputFilter());
$nonFile = $request->getPost()->toArray();
$File = $this->params()->fromFiles('report_file');
$data = array_merge_recursive(
$this->getRequest()->getPost()->toArray(),
$this->getRequest()->getFiles()->toArray()
);
$form->setData($data);
if ($form->isValid()) {
$size = new Size(array('min'=>500000)); //minimum bytes filesize
$adapter = new \Zend\File\Transfer\Adapter\Http();
//validator can be more than one...
$adapter->setValidators(array($size), $File['name']);
if (!$adapter->isValid()){
$dataError = $adapter->getMessages();
$error = array();
foreach($dataError as $key=>$row)
{
$error[] = $row;
} //set formElementErrors
$form->setMessages(array('report_file'=>$error ));
} else {
$adapter->setDestination(dirname(__DIR__).'/company_reports');
if ($adapter->receive($File['name'])) {
$companyreport->exchangeArray($form->getData());
$this->getCompanyReportTable()->saveCompanyReport($companyreport);
// Redirect to list of albums
return $this->redirect()->toRoute('companyreport');
}
}
}
}
return array(
'id' => $id,
'form' => $form,
);
}
ファイルのアップロードには editAction を提案してください。