Pessoal, boa noite!
Minha dúvida seria a melhor maneira (ou a mais cabível) para resolver meu problema de validação. Pois bem...
Tenho uma classe Acao (Entity\Acao) e um "Storage" (Table\Acao), onde o último faz a lógica com Banco. Minha validação hoje se encontra na Entity da seguinte maneira:
<?php namespace Emkt\API\Model\Entity; use ArrayObject; use Emkt\API\Model\Filter\Acao as AcaoFilter; use Zend\InputFilter\InputFilterAwareInterface; use Zend\InputFilter\InputFilterInterface; use Zend\Stdlib\Hydrator\ObjectProperty; class Acao implements InputFilterAwareInterface { /** * Filtro * @var \Zend\InputFilter\InputFilterInterface */ private $filter; public $emcam_codigo; public $emcam_tipo_acao; public $emcam_titulo; public function setInputFilter(InputFilterInterface $inputFilter) { $this->filter = $inputFilter; } public function getInputFilter() { if (null === $this->filter) { $this->filter = new AcaoFilter(); } return $this->filter; } public function getMessagesError() { $filter = $this->getInputFilter(); $inputError = $filter->getInvalidInput(); $messages = array(); foreach ($inputError as $error) { $messages[$error->getName()] = $error->getMessages(); } return $messages; } public function isValid() { $filter = $this->getInputFilter(); $filter->setData($this->getArrayCopy()); $valid = $filter->isValid(); if ($valid) { $this->getArrayCopy($filter->getValues()); } return $valid; } public function exchangeArray(array $data) { $hydrator = new ObjectProperty(); $hydrator->hydrate($data, $this); } public function getArrayCopy() { $toArray = array(); $toArray['emcam_codigo'] = $this->emcam_codigo; $toArray['emcam_tipo_acao'] = $this->emcam_tipo_acao; $toArray['emcam_titulo'] = $this->emcam_titulo; return $toArray; } }
O problema aqui é quando faço o método UPDATE, porque eu preciso que no POST ele valide todos os campos (tipo e título) da minha Entity Ação e no UPDATE não, ele só deve validar o que for passado.
Esse é o trecho de código presente hoje no Storage que faz a validação:
... $acaoEntity = new AcaoEntity(); $acaoEntity->exchangeArray($data); $valid = $acaoEntity->isValid(); if ( ! $valid) { $errors = $acaoEntity->getMessagesError(); return ['erros' => $errors]; }
O método exchangeArray() passa para a Entity os valores de $data, o problema é que mesmo quando esses valores não são passados (No caso do UPDATE) eu preciso que ele valide apenas os dados de $data. Deu pra entender?rs
Eu estou pensando em tirar a validação de dentro da Entity e jogar para o Storage, mas não sei se é uma boa opção. O que acham? Alguma ideia diferente?
Valeu!