Quantcast
Channel: Últimos conteúdos
Viewing all articles
Browse latest Browse all 14190

Ajuda com Validação de dados

$
0
0
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!

Viewing all articles
Browse latest Browse all 14190