Respuesta corta
No existe tal cosa.
Versión más larga:
Los marcos no implementan patrones de diseño inspirados en MVC o MVC. Tu aplicación lo hace.
MVC no es una salsa mágica, que puede agregar a su aplicación volcándola en un marco. En cambio, tendría que aprender y comprender dicho patrón (y los principios y prácticas que lo acompañan, como SOLID , LoD , SoC ) . Solo entonces puede intentar usarlo dentro de un marco de su elección.
Si un marco anuncia que "tiene MVC" , entonces es completamente pronuncian ños . En esa situación, se utiliza para "vender" el marco a los novatos que se preocupan más por el último despliegue publicitario que por el diseño de aplicaciones y las prácticas de codificación.
El objetivo de un marco sería proporcionarle una colección de herramientas que, cuando se usan como un todo, le brinden un entorno de desarrollo alterado / mejorado. Se ocupan de cosas como enrutamiento, carga automática, abstracciones de bajo nivel para el almacenamiento (no, no estoy hablando del antipatrón de registro activo) y el resto de cosas que le permiten ahorrar tiempo en el desarrollo y mantenimiento de boh.
En conclusión.
No hay marcos MVC en PHP. Todos los que me reclaman eso están entre los peores. A saber: codeigniter, cakephp y yii. Evítelos a toda costa (excepto si le pagan muy bien por ello).
Si necesita usar un marco, actualmente sus mejores opciones serían la última versión de Symfony 2.x, Zend Framework 2.xo Laravel 4.x. Estos no implementarán MVC para usted, sino que harán el menor daño para su propia arquitectura de aplicación.
Solo puedo hablar con Cake, y no tengo nada bueno que decir al respecto en términos de MVC. Ellos no hacen MVC derecha. Codeigniter está muy en la misma línea. No es extraño que no hayas "MVC" incluso después de haberlo usado por un tiempo.
MVC consiste simplemente en separar adecuadamente tres componentes distintos de la lógica de su aplicación: el núcleo de la aplicación , la presentación y el pegamento necesarios para que ambos funcionen en un contexto del mundo real.
El núcleo de su aplicación, que contiene toda la lógica de negocios, interacción con la base de datos, servicios, pitidos y boops que hacen de su aplicación "su aplicación" son el modelo. El modelo no es una cosa específica en una forma específica, es lo que sea necesario para que su aplicación funcione de la manera en que lo hace. Solo tienes un "modelo", que es tu aplicación.
La vista se utiliza para generar de alguna manera lo que hace su modelo. Es la interfaz de usuario. Es lo que sea necesario para mostrar información útil al usuario. Este puede ser un sitio web, puede ser una interfaz de línea de comandos, puede ser una GUI de escritorio nativa. Puede usar los tres en su aplicación.
El controlador es simplemente lo que queda para que funcione, principalmente lo que toma la entrada del usuario y la dirige al lugar apropiado. Puede tener varios tipos diferentes de controladores para diferentes tipos de contexto, por ejemplo, uno que pueda manejar las solicitudes HTTP entrantes, uno que maneje la entrada de la línea de comandos y otro que esté conectado a los eventos de la GUI.
La forma particular que toman estas partes individuales depende completamente de su aplicación. Los tres pueden ser una especie de miniaplicaciones propias. Cualquier "modelo" de marco prefabricado de plantilla está hecho para un caso generalizado para ayudarlo a poner en marcha algo rápidamente; a menudo no es la forma óptima que debería tomar su modelo. Tendrá que crear su propia estructura para su aplicación , lo que sea más adecuado para construirla. Examine los principios de OOP, SOLID, inyección de dependencia, etc. y construya su modelo central de acuerdo con estas pautas. Luego, ajuste las vistas y los controladores a su alrededor según sea necesario.
El objetivo de esta separación es simplemente hacer que la aplicación sea mantenible y ampliable. El modelo no contiene nada específico de ninguna forma específica de entrada o salida. Por ejemplo, no contiene ningún texto de formato específico (como mensajes de error en formato HTML). No asume ninguna forma particular de entrada (como las solicitudes HTTP). La Vista, por el contrario, no contiene ninguna lógica de negocios, su trabajo es solo la salida . Y el controlador tampoco contiene ninguna lógica de negocios, su trabajo es solo "ingresar" . La razón es simplemente que tanto el controlador como la vista son intercambiables, pero su aplicación no lo es.
Si desea usar un marco para esto, use uno que sea modular y le permita hacer lo que necesite hacer. Zend, Symfony, Laravel y los marcos de pick-and-choose basados en componentes similares son los más adecuados para esto.
fuente
Book
), servicios ("acciones", me gustacollateBookCollection
) y almacenamiento (saveBookToDatabase
). Lo que debe tener cuidado es que no ponga demasiado código en el controlador, que es algo que Cake & co. equivocarse completamente Haz que tu modelo sea realmente gordo.domain
: pTal marco no puede existir por varias razones.
En primer lugar, el Modelo en el patrón MVC es la parte que hace que su aplicación sea su aplicación. Si un marco definiera estrictamente el aspecto de un modelo, entonces ese marco solo sería utilizable para una o, como máximo, un puñado de aplicaciones. Esto efectivamente impide que sea un marco.
El segundo problema es que no existe un consenso universal sobre cómo se ve una aplicación adecuada del patrón MVC. Por ejemplo, algunos dirán que el Controlador debe proporcionar a la Vista los datos que necesita del Modelo, mientras que otros dirán que la Vista debe recuperar la información que necesita por sí misma y el Controlador debe asegurarse de que la Vista sepa dónde Encuentra el modelo.
Otro ejemplo, más específico para las aplicaciones web, es la cantidad de procesamiento que puede hacer la Vista. Para algunos, la Vista debe consistir exclusivamente en archivos HTML donde algunos marcadores de posición se reemplazan con el contenido real (generalmente recuperado por el Controlador del Modelo), mientras que otros se sienten perfectamente cómodos al permitir que la Vista realice el procesamiento relacionado con la interfaz de usuario, como la internacionalización del contenido presentado.
fuente
Entiendo que esta publicación tiene un año, lo que es irónicamente la razón por la que estoy publicando esta respuesta. En primer lugar, algunas de las personas que respondieron a esta pregunta tienen razón. Realmente nunca vas a encontrar un Framework PHP que venga "listo para MVC" desde el primer momento ... necesariamente. Ya que se supone que el marco es una base donde los desarrolladores pueden construir sobre él, siguiendo MVC. Sin embargo, en el último año desde que esto se publicó, algunos de los frameworks de PHP han recorrido un largo camino.
Jugué un poco con CakePHP por un momento, incluso hasta el día de hoy es una configuración horrible y desordenada de directorios y estructura, no hay una distinción clara entre la lógica, tiene un código bastante poco comentado y todo está un poco agrupado en un solo paquete lío. Eso no es una queja sobre CakePHP, eso es simple verdad.
Zend, es excelente. Proporcionan excelente documentación y comentarios de código, tienen una comunidad muy amigable y proporcionan un marco muy agradable para desarrolladores principiantes e intermedios. Han recorrido un largo camino desde que el OP publicó esto.
Y para las personas que dicen que no existe ese marco para responder la pregunta del OP, tienen razón como dije anteriormente. Sin embargo, también están equivocados. Zend, Laravel y CodeIgniter son marcos asombrosos, y aunque no te "dan" MVC, definitivamente te allanan el camino como desarrollador para crear aplicaciones MVC bellamente construidas, teniendo en cuenta que tú, como desarrollador, sigues un buen MVC prácticas
Para aquellos en este hilo que dicen que CodeIgniter es horrible. Estás bastante equivocado, al menos para los estándares de hoy. En el momento de esta publicación, no estaba en los marcos, así que no lo había mirado entonces. Por lo tanto, en ese momento podría haber sido horrible. Pero lo uso TODAS mis aplicaciones web ahora. Hacen un gran trabajo al crear un marco sólido con una estructura de directorio comprensible, así como también le brindan algunas herramientas increíbles para comenzar a MVC. Hacen un gran trabajo en la distinción lógica, tienen una comunidad increíble de soporte y, en general, proporcionan un marco excelente y gratuito que, una vez más, si sigues las buenas prácticas de MVC, puede convertirse en algunas aplicaciones increíbles.
Al punto principal. Quería interponer mi opinión sobre este tema. Nunca encontrará ese marco perfecto, construido por MVC y listo para usar . Sin embargo, si utiliza buenas prácticas de MVC y elige un marco sólido como Zend, Laravel y / o CodeIgniter, estará bien. Debido a que la verdad es que el MVC depende del desarrollador cómo implementa la buena práctica y no el marco. El marco ofrece la base, el resto depende del desarrollador.
Buenos marcos para usar como referencias
Solo recuerde cuando use estos, depende de usted como desarrollador seguir las buenas prácticas de MVC. Hay toneladas y toneladas de tutoriales sobre buenas prácticas de MVC. Me topé con el sitio web de un caballero que tiene algunas pautas increíbles , y apunta hacia un MVC adecuado, y hasta ahora sus publicaciones en el blog han sido bastante buenas, y es un gran lugar para comenzar a aprender.
Referencia
fuente
Parece que solo tienes problemas para "armarlo todo" porque muchos tutoriales no explican bien MVC de una manera clara. Le recomiendo que se "ensucie" las manos y cree una aplicación simple con entre 3 y 5 marcos diferentes para ver cómo suelen abordar el problema. Algunos tienen documentación sobre cómo configurar la arquitectura MVC básica para una aplicación y, si no lo hacen, siempre puede buscar en Google un par de tutoriales de mvc para ese marco en particular.
FWIW Me gustó la recomendación de diseño de proyecto / directorio de Zend: http://framework.zend.com/manual/1.12/en/project-structure.project.html
También eche un vistazo a "El marco PHP MVC sin marco" de Rasmus. Demuestra que realmente no necesita un marco, simplemente puede crear uno propio para satisfacer sus necesidades específicas. ¡Además, disfrutarás de los comentarios! http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html
fuente