Duvida sobre melhores práticas [Models]

Olá Pessoal,

Estou entrando no mundo do Yii a 2 dias.

Bom, entendi inicialmente como inicia um projeto, conheço bem já MVC, etc…

Porem o manual não me esclareceu algumas coisas e que estou tentando entender e resolver:

CModel = Component Model? Certo? Já que ele extende o CComponent e implementa as classes IteratorAggregate e ArrayAccess.

Até ai beleza. Observei nos exemplos que para usar o Active Record é o melhor caso correto?

Estou correto? Em quais casos é melhor implementar o Cmodel ou o CFormModel?

Em breve postarei mais duvidas aqui :)

Att,

João Vagner

Errado. CModel == CModel. Praticamente tudo no Yii extende a classe CComponent. Ela contém alguns métodos básicos utilizados em todo lugar do framework (como os métodos mágicos __get, __set, __isset, etc) e a base para o sistema de eventos e behavior.

O C no começo das classes não é de Component, mas sim de Class (pelo menos eu acredito que seja isso :P). É uma maneira que os desenvolvedores encontraram para evitar conflitos com nomes de classe em uma época que o php ainda não tinha suporte a namespaces.

No dia a dia, você não vai usar a classe CModel, mas sim as classes CFormModel e CActiveRecord.

CFormModel, como o próprio nome indica, é utilizada exclusivamente para formulários. Se você olhar o código gerado pelo yiic, ele vai criar um formulário de login que utiliza a classe CFormModel. Assim, podemos manipular os dados do formulário (recebe-los do $_POST e valida-los).

Se além disso, você também precisar desses dados no banco de dados, você deve utilizar a classe CActiveRecord. Além de toda a parte de manipulação e validação, ela permite recuperar, armazenar e atualizar registros no banco de dados, inclusive tratando do relacionamento entre tabelas.

Sendo assim, caso eu queria por exemplo construir um model onde vou resgatar os links (Tabela Menu), eu crio a classe extendendo a CActiveRecord? Ou simplesmente nao preciso extender?

Tem isso no manual? Passei batido por lá e não li? hehehe

Se não for muito complicado e puder, poderia postar um exemplo de model pra abservar um pouco as boas práticas?

Agradeço a ajuda :)

Sim, você precisa extender a classe CActiveRecord.

No guia tem tudo isso:

http://www.yiiframework.com/doc/guide/1.1/pt_br/basics.model

http://www.yiiframework.com/doc/guide/1.1/pt_br/form.overview

http://www.yiiframework.com/doc/guide/1.1/pt_br/database.ar

Eu estava navegando na parte errada da documentação então. Agora esclareceu muita coisa!

Obrigado!