Olá Marcus, aproveitando, você tem um domain model aí?
Você faz algum tipo de mapeamento O/R? Como você faz por exemplo para obter
todos os pedidos de um determinado cliente (cenário de exemplo)?
1) Select com join no banco (dados do pedido e do cliente) e passa a query
para a view
2) Faz algo equivalente ao passo 1 mas criando os objetos correspondentes
como Pedido, e cada pedido contendo um objeto do tipo Cliente que é quem fez
o pedido. Se sim, então no que o CI te ajuda especificamente?
Pergunto isso porque vi aquele tutorial de blog em 20min mas o blog não é
orientado a objetos, e ainda não consegui pescar como o CI ajuda a construir
uma aplicação orientada a objetos *de verdade*.
2008/6/4 Marcus Cavalcanti <[EMAIL PROTECTED]>:
> Na verdade esse thread não é para tirar dúvidas, e sim para dividir
> conhecimento, como estou vendo a galera animada com site, tutoriais, artigos
> e etc, penso que pode ser uma boa contribuição, pois com certeza outras
> pessoas passarão por essa situação.
>
> A questão toda é, na minha aplicação eu tenho uma estrutura um pouco
> diferente da proposta por default pelo CI.
>
> Dentro do diretório 'application' eu tenho outros 4 diretórios: frontend,
> backend, services e models.
>
> Tanto o 'frontend' quanto o 'backend' são as aplicações em si - no caso o
> site e o admin - com todos os diretórios comuns as aplicações, como: config,
> controllers, helpers, libraries, models, hooks, views, etc...
>
> E o diretórios 'models' e 'services' são os que guardam as informações do
> dóminio da minha aplicação. O 'models' guarda os modelos, e o 'services' é
> como uma fachada (façade pattern) para a minha aplicação, ou seja, nele eu
> tenho ruma interface comum de acesso que implementam rotina de N ou mais
> classes, no meu caso modelos.
>
> Eu preciso deixar o 'models' e os 'services' no mesmo nível do diretório
> das aplicações, justamente para eles poderem ser compartilhados entre elas.
>
> Eis que surge o problema.
>
> Para carregar os modelos, dessa forma, basta eu usar:
> $this->CI->load->model('../../models/Foto_Model', 'Photo', TRUE);
>
> Mas e para carregar as classes, que são como Libraries em sua essência?
> Nesse formato acima não consigo, pois o framework retorna um erro como se eu
> estivesse tentando istanciar o meu controller duas vezes.
>
> Solução: criei um helper, que serve como loader dessas classes.
>
> <?php
> /**
> * ci_class_loader - load class in 'services' path
> *
> * @access public
> * @param string
> * @return object
> */
> function ci_class_loader( $path ) {
> require_once( $path.'.php' );
>
> $name = end( explode( '/', $path ) );
> $class = ucfirst( $name );
> $ci =& get_instance();
> $ci->$name =& new $class();
>
> return $ci->$name;
> }
> ?>
>
> Partindo do princípio que suas classes começam com letra maiúscula, de
> acordo com os coding stardads, e que o nome do arquivo é o nome da classe,
> mas em minúsculo (padrão CI).
>
> Exemplo de uma chamada de um service em um Controller:
>
> <?php
>
> require_once('base.php');
>
> class Test extends BaseController {
>
> function Test() {
> parent::BaseController();
> }
>
> function index() {
> $ret = ci_class_loader(ROOTPATH."/services/teste");
> echo "<pre>";
> print_r(get_class_methods($ret));
> echo "</pre>";
> die;
> }
> }
> ?>
>
> Só para ressaltar, que esse ROOTPATH é uma constante que eu defini no meu
> index.php, para retornar apenas o PATH e não o FULLPATH da aplicação.
>
> Se quiserem adicionar esse conteúdo ao site, sintam-se a vontade, só
> gostaria que me mantivessem como autor.
>
> No mais, qualquer dúvida estamos aí.
>
> Boa sorte a todos no processo de implementação do site.
>
> Abraço,
>
> Marcus Cavalcanti
>
>
>
> _______________________________________________
> Lista mailing list
> [email protected]
> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
>
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br