Validação de dados
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!
Discussão (0)
Carregando comentários...