error; } // Retorna o valor da propriedade $validacao public function getValidacao( ) { return $this->validacao; } public function run( ) { // normalmente, possuimos uma classe para trabalhar // com metodo POST e GET. No nosso caso, de forma a // simplificar a quantidade de codigo, vamos usar a // variavel $_POST diretamente // Essas aqui serao as acoes que iremos validar. Como // ja comentado, as acoes sao definidas atraves do valor // do botao que faz o metodo POST $validActions = array( 'insert', 'update', 'delete' ); $acao = strtolower( $_POST['acao'] ); if( in_array( $acao , $validActions ) ) { // Inicializar a variavel de controle de erro $this->error = true; // Se chegou nesse ponto, significa que a acao realizada // foi uma das acima. Agora deve-se carregar o xml e começar a // fazer o seu parsing $xml = simplexml_load_file( 'validador.xml' ); // A partir de agora, vamos avaliar cada uma das linhas do xml // e realizar a validacao. foreach( $xml->field as $campo ) { // Aqui, vamos procurar pelo campo atual que encontramos no xml // dentro do array $_POST. Se o campo for encontrado, iremos // validar o valor que nos foi enviado. if( array_key_exists( (string)$campo['name'], $_POST ) ) { // Otimo, encontramos o campo no array POST. Porem antes // de validarmos o campo, precisamos verificar se ele // deve ser validado na acao que esta acontecendo. // Lembra-se da propriedade 'when' no xml? Eh aqui // que ela entra, nos informando se o campo deve ou nao // ser validado. As acoes devem ser separadas por uma ',' // no xml $whenToValidate = explode(',', $campo['when'] ); if( in_array( $acao, $whenToValidate ) ) { // Finalmente chegamos! Chegou aqui, entao esta na hora // de validar o campo de acordo com o que esta no xml. // O conteudo especificado na propriedade 'validation' // do xml, define um metodo estatico a ser chamado para // validar o valor que foi enviado no metodo post // nos permitindo assim, assumit que esse metodo recebe // ao menos 1 parametro, que eh o valor a ser validado // Veja a classe com os metodos de validacao, para // entender exatamente o que acontece $codigo = sprintf('$ret = %s( $_POST["%s"] );', (string)$campo['validation'], (string)$campo['name'] ); // Suponto que estamos validando o campo 'nome', que // da maneira como está descrito no xml do tutorial, // teremos $codigo valendo algo como: // $ret = validator::isFilled( $_POST["nome"] ); // Executa-se o código de validação agora. A variavel // $ret ira conter o resultado da validacao. eval( $codigo ); // Caso $ret seja diferente de true, estou assumindo // que o retorno é entao uma mensagem de erro if( $ret === true ) { $this->validacao[(string)$campo['name']] = true; } else { $this->error = true; $this->validacao[(string)$campo['name']] = $ret; } } } } } } } ?>