Olá pessoal, esta é a minha primeira contribuição com a comunidade VOL.
Estou desenvolvendo um framework em PHP para usar como ferramenta de desenvolvimento no meu dia a dia, e claro, visando uma maior produtividade escrevi um código "PopulateObject" que não faz nada de mais, apenas "linka" um formulário com um objeto, assim na hora de algum cadastro, não ficar dando sets e sets, lembrando que funciona apenas com projetos orientados a objeto.
Este conceito não é novo, certamente deve existir outros e outras formas, mas não há mal em divulgar mais uma.
Bom, o código em si é até bastante simples:
<?php
class PopulateObject {
public static function populate(&$object, $_POST) {
foreach ($_POST as $name => $value) {
try {
$object->set($name, $value);
} catch (Exception $ex) {
throw new Exception($ex->getMessage());
}
}
}
}
?>
E para o script funcionar corretamente existem algumas regras:
- O sistema deve ser orientado a objeto.
- A classe deve conter os métodos get($prop) e set($prop,$value)
- Os campos html devem ter o mesmo nome dos atributos da classe.
- Use o method POST
Para usar veja este pequeno exemplo:
# formulario.html
<html>
<form action="resposta" method="POST">
<br><br><li>Formulario:</li>
Id: <input name="id" id="id"><br>
Atributo1: <input name="atributo1" id="atributo1"><br>
Atributo2: <input name="atributo2" id="atributo2"><br>
Atributo3: <input name="atributo3" id="atributo3"><br><br>
Atributo3: <input name="atributo4" id="atributo4"><br><br>
<input type="submit" value="Enviar">
</form>
</html>
# classe.php
<?php
class Modelo1 {
private $id;
private $atributo1;
private $atributo2;
private $atributo3;
function set($at, $vl) { $this->$at = $vl; }
function get($name) { return $this->$name; }
}
Usando o script:
function gravar() {
$modelo = new Modelo1();
PopulateObject::populate($modelo, $_POST);
try {
Modelo1DAO::insert($modelo);
Fyphp::forward("Views/mensagens/operacaoSucesso.php");
} catch (Exception $ex) {
Fyphp::forward("Views/mensagens/operacaoFalha.php");
}
}
Bom, é isso, sinta-se livre pra fazer o que quiser com o código.