3.7.1 Introdução
Models são usados no CakePHP para acessar os dados. Models representam, normalmente, tabelas de banco de dados, mas também podem ser usadas para acessar arquivos, registros LDAP, eventos iCal ou uma linha num arquivo CSV.
Models também podem ser associados, a fim de tornar mais fácil o acesso aos dados. Se quando você procura dados do model Recipe e quer saber os dados de Author e Ingredient associadas, as associações de models podem lhe ajudar.
Novidades no CakePHP são as DataSources e Behaviors. DataSources foram uma base unificada para os models CakePHP. Isso permite uma maior interação entre os models, incluindo as associações. Model behaviors oferecem uma maneira de misturar as funcionalidades. Especificando behaviors para models é dado acesso a lógicas de manipulação de dados comuns: itens como remoção de itens na árvore de dados, manipulação de upload e muito mais. Abaixo um model completamente funcional:
<?php
class Ingredient extends AppModel {
var $name = 'Ingredient';
}
?>
<?phpclass Ingredient extends AppModel {var $name = 'Ingredient';}?>
Repare que os models do CakePHP derivam da classe especial AppModel: o pai para todos os models da sua aplicação. Assim como AppController (e AppHelper), esta é uma classe especial que é ideal para você compartilhar a lógica comum para todos os models. A classe AppModel deve ser criada em /app/app_model.php e deve estender (extends) a classe Model.
Com apenas algumas linhas de código, você pode ter completas funcionalidades de CRUD (create, retrieve, update, delete). A maioria dessas funcionalidades provém da classe avô Model. Uma vez que você tenha criado seu model, você poderá usá-lo em seus controllers. Segue um exemplo básico de um model a ser utilizado ($this->Ingredient) para buscar a lista de registros e passá-la para a view.
<?php
class IngredientsController extends AppController {
function index() {
// Passa uma lista de todos os ingredientes para a view:
$this->set(
'ingredients',
$this->Ingredient->findAll()
);
}
}
?>
<?phpclass IngredientsController extends AppController {function index() {// Passa uma lista de todos os ingredientes para a view:$this->set('ingredients',$this->Ingredient->findAll());}}?>
Usando models para buscar e salvar os dados pode poupar sérias dores de cabeça. Models no CakePHP prove uma abordagem padronizada e centralizada para o armazenamento de dados, ao mesmo tempo oferecendo um nível de segurança para sua aplicação.
Classes de model podem ser expandidas para incluir mais atributos e métodos para melhorar suas funcionalidades. Estes atributos e métodos serão explicados depois.
