Попробовал так, но безуспешно.
Фильтр:
class ProductFilter extends InputFilter
{
protected $category;
public function __construct (Array $category = array())
{
$this->category = $category;
...............
$images = new FileInput('images');
$images ->setRequired(true);
$images ->getFilterChain()->attach(new RenameUpload(array(
'target' => 'files/images/product/product-',
'use_upload_extension' => true,
'randomize' => true,
)));
$images ->getValidatorChain()->attach(new Size(array(
'max' => substr(ini_get('upload_max_filesize'), 0, -1). 'MB',
)));
$images ->getValidatorChain()->attach(new MimeType(array(
'image/gif', 'image/jpeg', 'image/png', 'enableHeaderCheck' => true,
)));
$this->add($images);
...............
}
}
Форма:
class ProductForm extends Form implements ObjectManagerAwareInterface
{
protected $objectManager;
public function __construct(ObjectManager $objectManager)
{
$this->setObjectManager($objectManager);
parent::__construct(null);
$this->setAttribute('method', 'post');
$this->setAttribute('class', 'form');
...............
$images = new File('images');
$images ->setLabel('Изображения: ');
$this->add($images);
...............
}
}
Контроллер:
public function insertAction ()
{
if (is_string($this->form))
$form = new $this->form;
else
$form = $this->form;
$request = $this->getRequest();
if ($request->isPost()) {
$form->setData(array_merge_recursive(
$this->getRequest()->getPost()->toArray(),
$this->getRequest()->getFiles()->toArray()
));
if ($form->isValid()) {
$service = $this->getServiceLocator()->get($this->service);
if ($service->save(
$this->getRequest()->getPost()->toArray(),
$this->getRequest()->getFiles()->toArray())) {
$this->flashMessenger()->addSuccessMessage('Данные успешно добавлены');
} else {
$this->flashMessenger()->addErrorMessage('Ошибка при добавлении данных');
}
return $this->redirect()->toRoute($this->route, array('controller' => $this->controller, 'action' => 'select'));
}
}
if ($this->flashMessenger()->hasSuccessMessages()) {
return new ViewModel(array(
'form' => $form,
'success' => $this->flashMessenger()->getSuccessMessages(),
));
}
if ($this->flashMessenger()->hasErrorMessages()) {
return new ViewModel(array(
'form' => $form,
'error' => $this->flashMessenger()->getErrorMessages(),
));
}
if ($this->flashMessenger()->hasWarningMessages()) {
return new ViewModel(array(
'form' => $form,
'warning' => $this->flashMessenger()->getWarningMessages(),
));
}
if ($this->flashMessenger()->hasInfoMessages()) {
return new ViewModel(array(
'form' => $form,
'info' => $this->flashMessenger()->getInfoMessages(),
));
}
$this->flashMessenger()->clearMessages();
return new ViewModel(array(
'form' => $form,
));
}
АбстрактныйСервис:
abstract class AbstractService
{
/**
* @var EntityManager
*/
protected $em;
/**
* @var
*/
protected $entity;
/**
* @param EntityManager $em
*/
public function __construct (EntityManager $em)
{
$this->em = $em;
}
/**
* @param array $data
* @return bool|\Doctrine\Common\Proxy\Proxy|null|object
* @throws \Doctrine\ORM\ORMException
*/
public function save (Array $data = array())
{
if (isset($data['id'])) {
$entity = $this->em->getReference($this->entity, $data['id']);
$hydrator = new ClassMethods();
$hydrator->hydrate($data, $entity);
} else {
$entity = new $this->entity($data);
}
$this->em->persist($entity);
$this->em->flush();
return $entity;
}
}