我想将表单中的文件上传到我的Application文件夹(public / img / clientes /) 我的表单文件上传字段:
$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
]);
}
我无法找到不工作的理由
如果有人能帮我解决这个问题,我将非常感激。
答案 0 :(得分:3)
希望这里的一切都是自我描述的。只是上传位置有点奇怪。由于每个请求都由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!';
}
}
}
...