No artigo anterior expliquei como popular um POJO (plain old java object) automaticamente a partir do request. Nesse artigo explicarei como implementar isso em PHP (POPO = plain old PHP object).
Vamos ver um cenário típico:
Definição da Classe:
<?php
class Pessoa {
private $id;
private $nome;
private $email;
private $telefone;
//getters e setters
}
?>
Formulário HTML para cadastro:
<form action="cadastrar.php" method="post">
Nome: <input type="text" name="nome" /><br/>
Email: <input type="text" name="email" /><br/>
Telefone: <input type="text" name="telefone" /><br/>
<input type="submit" value="Cadastrar" />
</form>
Arquivo cadastrar.php
<?php
require_once 'Pessoa.php';
$pessoa = new Pessoa();
$pessoa->setNome($_REQUEST['nome']);
$pessoa->setEmail($_REQUEST['email']);
$pessoa->setTelefone($_REQUEST['telefone']);
//salva a pessoa no DAO
?>
Esse processo não é produtivo e muito entediante, especialmente se possuir muitos campos. Podemos usar um excelente recurso do PHP para automatizar tarefas repetitivas: Reflection.
Vejamos como poderíamos melhorar o processo:
Arquivo cadastrar.php
<?php
//Função que popula um objeto qalquer com dados do request.
public function populateFromRequest($object) {
$reflectionClass = new ReflectionClass(get_class($object));
foreach ($_REQUEST as $name => $value) {
try {
$typeProperty = $reflectionClass->getProperty($name);
$typeProperty->setAccessible(true);
$typeProperty->setValue($object, $value);
} catch (Exception $exc) {}
}
}
require_once 'Pessoa.php';
$pessoa = new Pessoa();
populateFromRequest($pessoa, 'Pessoa');
//salva a pessoa no DAO
?>
A função populateFromRequest procura no objeto as propriedades cujos nomes coincidam com os nomes dos campos guardados no $_REQUEST, quando os nomes batem o valor da propriedade é setada com o valor do campo no $_REQUEST.
Essa função deverá ser isolada pois pode ser usada em outras situações com objetos diferentes.
Atenciosamente,
Gustavo Marques
Nenhum comentário:
Postar um comentário