Resposta curta
Não existe tal coisa.
Versão mais longa:
Estruturas não implementam MVC ou padrão de design inspirado em MVC. Sua aplicação faz.
O MVC não é um molho mágico, que você pode adicionar ao seu aplicativo despejando-o em uma estrutura. Em vez disso, você precisaria aprender e entender o referido padrão (e os princípios e práticas que o acompanham, como SOLID , LoD , SoC ) . Somente então você pode tentar usá-lo na sua escolha de uma estrutura.
Se um quadro anuncia que "tem MVC" , então é completamente proferem dren . Nessa situação, é usado para "vender" a estrutura aos noobs que se preocupam mais com o hype mais recente do que com o design de aplicativos e práticas de codificação.
O objetivo de uma estrutura seria fornecer uma coleção de ferramentas que, quando usadas como um todo, forneçam um ambiente de desenvolvimento alterado / aprimorado. Eles lidam com coisas como roteamento, carregamento automático, abstrações de baixo nível para armazenamento (não, não estou falando de antipadrão de registro ativo) e o restante das coisas que permitem economizar tempo no desenvolvimento e manutenção da boh.
Em conclusão.
Não há estruturas MVC no PHP. Todos aqueles que me reivindicam estão realmente entre os piores. Ou seja - codeigniter, cakephp e yii. Evite-os a todo custo (exceto se você for muito bem pago).
Se você precisar usar uma estrutura, atualmente suas melhores opções seriam a versão mais recente do Symfony 2.x, Zend Framework 2.x ou Laravel 4.x. Esses não implementarão o MVC para você, mas causarão o menor dano à sua própria arquitetura de aplicativo.
Só posso falar com o Cake e não tenho nada de bom a dizer sobre isso em termos de MVC. Eles não fazem o MVC corretamente. O Codeigniter está na mesma linha. Não é de todo estranho que você não "tenha" MVC mesmo depois de usá-lo por um tempo.
O MVC é simplesmente separar adequadamente três componentes distintos da lógica do seu aplicativo: o núcleo do aplicativo , a apresentação e a cola necessária para fazer com que ambos funcionem em um contexto do mundo real.
O núcleo do seu aplicativo, que contém toda a lógica comercial, interação com o banco de dados, serviços, bipes e boops que tornam seu aplicativo "seu aplicativo", é o modelo. O modelo não é uma coisa específica em uma forma específica, é o que for necessário para que seu aplicativo funcione da maneira que funciona. Você só tem um "modelo", que é o seu aplicativo.
O View é usado para produzir de alguma forma o que o seu modelo faz. É a interface do usuário. É o necessário para mostrar informações úteis ao usuário. Pode ser um site, uma interface de linha de comando, uma GUI de área de trabalho nativa. Você pode usar os três no seu aplicativo.
O Controller é simplesmente o que resta para fazer esse trabalho, principalmente o que recebe as informações do usuário e as direciona para o local apropriado. Você pode ter vários tipos diferentes de controladores para diferentes tipos de contexto, por exemplo, um que pode lidar com solicitações HTTP recebidas, um que lida com a entrada da linha de comando e outro conectado a eventos da GUI.
O formato específico dessas partes individuais depende totalmente do seu aplicativo. Todos os três podem ser uma espécie de mini-aplicativo próprio. Qualquer "modelo" de estrutura pré-fabricada por modelo é feito para um caso generalizado para ajudá-lo a colocar algo em funcionamento rapidamente; geralmente não é a forma ideal que seu modelo deve assumir. Você precisará criar sua própria estrutura para o seu aplicativo , o que for mais adequado para construí-lo. Examine os princípios de POO, o SOLID, a injeção de dependência etc. e construa seu modelo principal de acordo com essas diretrizes. Em seguida, envolva visualizações e controladores, conforme necessário.
O objetivo dessa separação é simplesmente tornar o aplicativo sustentável e extensível. O modelo não contém nada que seja específico para qualquer forma específica de entrada ou saída. Por exemplo, ele não contém nenhum texto específico de formato (como mensagens de erro no formato HTML). Ele não assume nenhuma forma específica de entrada (como solicitações HTTP). O View, por outro lado, não contém nenhuma lógica comercial, seu trabalho é apenas produzir . E o controlador também não contém nenhuma lógica de negócios, seu trabalho é apenas "inserir" . O motivo é simplesmente que o controlador e a visualização são intercambiáveis, mas seu aplicativo não é.
Se você quiser usar uma estrutura para isso, use uma que seja modular e permita que você faça o que precisar. Zend, Symfony, Laravel e frameworks de escolha e escolha baseados em componentes similares são os mais adequados para isso.
fonte
Book
), serviços ("actions", likecollateBookCollection
) e storage (saveBookToDatabase
). Você precisa tomar cuidado para não colocar muito código no controlador, o que é algo que a Cake & co. completamente errado. Faça seu modelo realmente gordo.domain
Essa estrutura não pode existir por várias razões.
Primeiro de tudo, o modelo no padrão MVC é a parte que torna seu aplicativo seu aplicativo. Se uma estrutura definisse estritamente a aparência de um modelo, essa estrutura só seria utilizável para um ou no máximo alguns aplicativos. Isso efetivamente impede que seja uma estrutura.
O segundo problema é que não há consenso universal sobre como é uma aplicação adequada do padrão MVC. Por exemplo, alguns dirão que o Controlador deve fornecer à View os dados de que precisa do Modelo, enquanto outros dirão que a View deve recuperar as informações necessárias por si mesma e o Controller deve apenas garantir que a View saiba onde encontre o modelo.
Outro exemplo, mais específico para aplicativos da Web, é a quantidade de processamento que o View pode fazer. Para alguns, o View deve consistir exclusivamente em arquivos HTML, onde alguns espaços reservados são substituídos pelo conteúdo real (geralmente recuperado pelo Controller do Modelo), enquanto outros se sentem perfeitamente à vontade para permitir que o View faça o processamento relacionado à UI, como internacionalização do conteúdo apresentado.
fonte
Entendo que este post tem anos, o que é ironicamente o motivo pelo qual estou postando esta resposta. Primeiro, algumas das pessoas que responderam a essa pergunta estão certas. Você realmente nunca encontrará um Framework PHP que seja "MVC Ready" pronto para uso ... necessariamente. Visto que a estrutura deveria ser uma base na qual os Dev's podem se basear nela, seguindo o MVC. No entanto, no último ano desde que isso foi publicado, algumas das estruturas PHP por aí certamente percorreram um longo caminho.
Eu brinquei com o CakePHP por um tempo, até hoje é uma configuração horrível e confusa de diretórios e estrutura, não há uma distinção clara entre lógica, ele tem um código muito mal comentado e tudo está meio amontoado em um pacote bagunça. Isso não é um discurso retórico no CakePHP, é uma verdade simples.
Zend, é excelente. Eles fornecem excelente documentação e comentários de código, têm uma comunidade muito amigável e fornecem uma estrutura muito agradável para desenvolvedores iniciantes e intermediários. Eles percorreram um longo caminho desde que o OP publicou isso.
E para as pessoas que dizem que não existe essa estrutura para responder à pergunta do OP, elas estão certas como eu disse acima. No entanto, eles também estão errados. Zend, Laravel e CodeIgniter são estruturas incríveis e, embora não "forneçam" o MVC, eles definitivamente pavimentam uma estrada para você, como desenvolvedor, criar aplicativos MVC maravilhosamente construídos, considerando que você, como desenvolvedor, segue o bom MVC práticas.
Para aqueles neste tópico dizendo CodeIgniter é horrível. Você está completamente errado, pelo menos pelos padrões de hoje. No momento deste post, eu não estava em estruturas, então não havia analisado isso então. Portanto, naquele momento, poderia ter sido horrível. Mas eu uso TODAS as minhas aplicações web agora. Eles fazem um ótimo trabalho ao criar uma estrutura sólida com uma estrutura de diretórios compreensível, além de fornecer algumas ferramentas incríveis para iniciar o MVC. Eles fazem um ótimo trabalho na distinção lógica, têm uma comunidade incrível de suporte e, em geral, fornecem uma excelente estrutura livre que, novamente, se você seguir as boas práticas de MVC, pode se transformar em aplicativos incríveis.
Para o ponto principal. Eu queria interpor minha opinião sobre esse assunto. Você nunca encontrará essa estrutura pronta para uso, perfeita, criada pelo MVC . No entanto, se você utilizar boas práticas de MVC e escolher uma estrutura sólida como Zend, Laravel e / ou CodeIgniter, ficará bem. Porque a verdade é que o MVC depende do desenvolvedor como ele implementa boas práticas e não a estrutura. A estrutura oferece a base, o resto depende do desenvolvedor.
Boas estruturas para usar como referências
Lembre-se de que, ao usá-las, é sua responsabilidade, como desenvolvedor, seguir as boas práticas de MVC. Existem muitos tutoriais sobre boas práticas de MVC. Eu me deparei com o site de um cavalheiro que tem algumas diretrizes surpreendentes , e ele visa um MVC adequado, e até agora suas postagens no blog têm sido muito boas, e ele é um ótimo lugar para começar a aprender.
Referência
fonte
Parece que você está tendo problemas para "juntar tudo", porque muitos tutoriais são ruins em explicar o MVC de maneira clara. Eu recomendo que você fique com as mãos "sujas" e crie um aplicativo simples com cerca de 3 a 5 estruturas diferentes para ver como elas normalmente abordam o problema. Alguns têm documentação sobre como configurar a arquitetura básica do MVC para um aplicativo e, caso contrário, você sempre pode pesquisar no Google alguns tutoriais de mvc para essa estrutura específica.
FWIW Gostei da recomendação de layout de projeto / diretório do Zend: http://framework.zend.com/manual/1.12/en/project-structure.project.html
Dê uma olhada também no "O framework PHP MVC sem estrutura" do Rasmus. Isso mostra que você realmente não precisa de uma estrutura, basta criar sua própria para atender às suas necessidades específicas. Além disso, você receberá um chute nos comentários! http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html
fonte