Olá pessoal,
Alguém tem um exemplo de orientação objeto com framework codeigniter usando DAO?
Obrigado.
Olá pessoal,
Alguém tem um exemplo de orientação objeto com framework codeigniter usando DAO?
Obrigado.
Se poderia dizer mais o que precisa saber? acredito que falte um contexto!
Eu queria separar os cruds.
Pelo que estudei isso é feito no model, porém, é chato ficar reescrevendo código. Queria usar polimorfismo, para utilizar as mesmas funções em vários models.
Então por exemplo, salvar um cliente:
Modelo com nome e codigo, get e sets
CrudDAO com a function salvar
Controller do cliente que valida os dados e salva o objeto usando o CrudDAO
View que manda os dados para o controller
Eu não estou conseguindo ver uma possibilidade de trabalhar assim com a estrutura do codeigniter.
Não faço idéia de como o CodeIgniter funciona, mas se você quer uma única classe polimórfica para essa situação, creio que você deve se aprofundar em traits e reflection (sim, php tem reflexões )
Usando traits você pode fazer algo nesse sentido…
trait CrudDAO {
public function save() {
$strFields = implode(',', $this->fields);
$strPlaces = str_repeat('?', count($this-fields)); // evita SQL injection!
$sql = 'INSERT INTO {$this->table} ({$strFields}) VALUES ({$strPlaces})';
....
$pdo->execute($this->values); // array de valores...
}
public function list() {...}
public function find($id) {...}
public function remove() {...}
}
Depois os modelos que reutilizarem seriam algo nesse sentido…
class Model {
use CrudDAO;
private $table = 'Model';
private $fields = ['f1', 'f2', 'f3'...];
private $values = ['1', '2', '3'];
}
E na hora de chamar…
$model = new Model();
$model->insert(); // por exemplo...
Algo no sentido de active record…
É apenas um exemplo mesclando a trait ao PDO por exemplo, garantindo segurança no banco etc…
E assim você começa montar sua lógica, tendo em vista que o que muda nas operações basicamente seria o nome da tabela e a quantidade de campos e valores que cada Model necessita…
Perceba como a trait se integra com a classe que a utiliza, em nenhum momento eu declarei os atributos table, fields e values nela, mas estou usando nos métodos, a regra é você declarar esses campos na classe principal, bom aí é com você, brinca um pouco com isso, vai valer a pena nem que seja pra aprender e saber mais sobre os recursos da linguagem… boa sorte!