Exemplo de OO com Codeigniter

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 :joy:)

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!

1 curtida