Dica: compartilhando models, controllers e views entre aplicações no CakePHP

Olá pessoal,

estou desenvolvendo meu projeto deste ano da faculdade em CakePHP e uma coisa que ainda não havia pensado em fazer era o compartilhamento dos arquivos MVC's.

No meu projeto, estou compartilhando os models entre as 4 aplicações que fazem parte do mesmo sistema. Então, como fazer?

A primeira coisa que fiz para acelerar as coisas foi mapear o banco, mas nisso já se foram aproximadamente 40 classes models :) , se eu copiasse e colasse nas outras partes do projeto, resultaria em 160 classes e com certeza em muita dor de cabeça para mantê-las sincronizadas.

A solução: bootstrap.php!

O arquivo bootstrap é carregado automaticamente depois que o arquivo app/webroot/index.php e depois que o bootstrap.php (nível núcleo do Cake) é carregado. É usado para adicionar qualquer função que não for usada numa classe, pode ser usado também para dar um include/require em qualquer arquivo da sua aplicação.
No meu caso que queria adicionar um diretório para os models, então usei, nas minhas demais aplicações (tal como app2, app3 e etc):

PHP:
  1. $modelPaths = array(ROOT.DS."app".DS."models".DS);

Assim, sempre será buscado (também) os models em: /app/models/. Lembrando que DS é o directory separator, que no windows é \ e no linux é / e ROOT representa o caminho físico da instalação do Cake.

Para usar com views e controllers é a mesma configuração, mas usando:

PHP:
  1. $controllerPaths = array(ROOT.DS."app".DS."controllers".DS);
  2.  
  3. $viewPaths = array(ROOT.DS."app".DS."views".DS);

Qualquer dúvida, comentem!

Até a  próxima pessoal!

10 Comentários »

  1. Éverton said,

    Outubro 12, 2007 @ 19:50

    Muito boa a dica,

    No projeto que estamos trabalhando, passamos por isso também quando estávamos escolhendo um framework, e foi uns dos motivos que nos levou a usar Symfony.

    O Symfony e bem completo nessa parte de dividir um projeto em aplicaçõe, e compartilhar arquivos entre elas, mas ainda acho mais fácil trabalhar com os models do Cake do que com os models do Symfony, e em mais simples prefiro Cake.

  2. Gustavo Carreno said,

    Outubro 12, 2007 @ 21:00

    Boas mermão !!

    Bem esta é, definitivamente, de génio.

    É daquelas que não lembra a ninguem mas que é puta simples!!

    Valeu cara, a dica está demais!!

    Um abraço de co-admin,
    Gustavo Carreno

  3. Tulio Faria said,

    Outubro 12, 2007 @ 22:17

    Éverton,

    confesso que fiquei meio encabulado, com medo de ter que fazer alguma gambiarra...rs... Mas depois que achei o bootstrap, foi só alegria... Principalmente por esse compartilhamento estar disponível através de comentários no próprio bootstrap.

    Carreno,

    valeu :)

    Abraços!

    Long Live CakePHP!

  4. Victor Sobreira said,

    Outubro 15, 2007 @ 02:43

    Bom, adorei isso.
    ja tinha ate perguntado de certa forma.

    mais como seria pra trabalhar na parte do webroot?

    se fosse um sistema que fosse necessário integrar a webroot de outro.
    qual seria o modo?

    o bootstrap.php nao da suporte a isso a nao ser pra view, controllers e models.

    eu fiz praticamente uma gambiarra pra poder fazer isso.
    que seria criar subdominios pra poder pegar as imagens, css, js e outras coisas que possa ser vista entre todos.
    :)

  5. Thiago de Castro Costa said,

    Outubro 15, 2007 @ 13:09

    Heheheh, muito loko... valeu tulio

  6. Tulio Faria said,

    Outubro 15, 2007 @ 14:41

    Victor,

    então rapaz, estou procurando sobre o webroot. Sei que tem como sim... Mas ainda não encontrei... Assim que eu descobrir te aviso...

    Valeu Thiago :)

    Abraços a todos,

  7. Victor Sobreira said,

    Outubro 16, 2007 @ 16:07

    o que eu sei ate agora, é criar subdominios e move para la os arquivos que forem fazer upload.

    é um metodo.

  8. Juan Basso said,

    Dezembro 14, 2007 @ 12:14

    Primeiramente gostaria de parabenizar o Tulio pelo post que é muito exclarecedor e que ajuda muito na hora de desenvolver. Eu tinha visto essa funcionalidade no código do cake, mas nunca parei pra pensar que daria para utilizar assim. :)

    Victor,

    Não sei é bem isso que você quer, mas é possível informar o cake para utilizar outra pasta de webroot. Você pode definir a variável $webroot da classe do seu controller. Se você quer definir para todos os métodos, defina como da classe, senão defina dentro da classe com $this->webroot.

    O valor é a pasta "virtual", ou seja, se os arquivos estão em http://SERVER/cake, defina como '/cake/'.

  9. Tiago Piccinin said,

    Março 20, 2008 @ 17:05

    Excelente. Era o que procurava.

    Obrigado pela dica, irmão.

    Abraço.

    Tiago

  10. Tiago Piccinin said,

    Março 24, 2008 @ 15:04

    Olá, Túlio.

    Solucionei um problema aqui de uma forma que não sei se é a mais correta. Vc que já passou por isso deve saber melhor.

    Eu estava usando diferentes conexões aí dava erro pois dizia que não achava a conexão de um app.

    Eu usei um include no meu arquivo database.php, estou incluindo o database.php de um app em outro.

    Será que é esse o melhor caminho?

    Abraços!!

RSS feed for comments on this post · URI do TrackBack

Deixe seu comentário