2011-02-10 15 views
5

Estamos evaluando algunos marcos PHP para un sitio web productivo. CakePHP parece bastante interesante, pero no tenemos idea de si se adapta a nuestras necesidades.CakePHP para grandes proyectos

Básicamente, cuando revisas la documentación y los tutoriales de CakePHP parece realmente prometedor. Sin embargo, siempre hubo algunas cosas que me molestaron con los marcos hasta el momento, tal vez alguien que ya utilizó CakePHP en un proyecto productivo podría responder a estas preguntas para mí.

  • Escribir/Leer datos para registros individuales se ve bastante ordenado en CakePHP. ¿Qué sucede si desea leer datos de múltiples tablas con condiciones complejas, agrupar por, dónde cláusulas? ¿Cómo lo maneja CakePHP?
  • El andamio se ve muy bien para las interfaces de administración básicas. Qué fácil es personalizar esto. Digamos que tengo una clave externa en una de mis tablas. Cuando creo una página de andamios, ¿CakePHP automáticamente crea una lista desplegable para mí con todos los elementos posibles? ¿Qué pasa si quiero filtrar los posibles artículos? Digamos que quiero combinar dos campos en un campo en la parte de vista, pero cuando lo edite, podré editar ambos campos individualmente. ¿Esto funciona?
  • ¿Crees que fuiste más rápido en desarrollo con CakePHP que con un PHP simple?

Respuesta

7

He usado CakePHP, Zend Framework y también he escrito aplicaciones "desde cero" con nada más que clases propias y cosas así. A eso me gustaría mencionar que uso CakePHP regularmente, así que tómalo como quieras.

  • (datos de escritura/lectura, condiciones complejas) Por supuesto que puede hacer todo lo que usted ha mencionado. Otros son correctos en el sentido de que intenta abstraer operaciones SQL por usted. Aún no tengo una consulta que no pueda traducir en el "lenguaje" de Cake; consultas geoespaciales complejos, combinaciones, etc.

  • (andamios, condiciones complejas) El andamio es en realidad sólo pretende servir como un "buen inicio" de clases para ayudar a asegurarse de que sus asociaciones de modelos y como están configurados correctamente y no debe usarse como una solución permanente. Con ese fin, sí hará un trabajo bastante bueno al introspectar sus relaciones y proporcionar marcas relevantes.

  • (Desarrollo más rápido) Por supuesto. Existe una gran comunidad con una gran cantidad de complementos o ejemplos para ayudarlo a comenzar. Independientemente de lo que elijas, la elección de un marco te hará "más rápido" casi con la certeza, aunque solo sea para manejar las minucias que conlleva la configuración de una aplicación.

0

(Nota: Esta es una cuestión subjetiva Usted está solicitando opiniones Así que espero que no le importa si le doy la mía...)

(Edit:. Operaciones que mezclan la torta con CI)

Utilicé Code Igniter hace un tiempo. Hizo todo lo que debería y fue bastante fácil de entender. Sin embargo, para grandes proyectos, carecía de características. Muchos proponentes de CI dicen que esta es su fortaleza ya que lo mantiene rápido y puede generar poca memoria RAM. Esto es verdad.

Sin embargo, después de desarrollar una aplicación con él, me encontré buscando en otra parte para no tener que escribir código que debe haber sido escrito antes. Miré a CakePHP y lo encontré demasiado restrictivo y automágico. En particular, necesitaba algún tipo de funcionalidad ACL. Esto me llevó a Zend Framework. Aprendí que está débilmente acoplado. Puedo incluir solo los archivos que necesito. También puedo hacer uso de Zend_Application para proyectos grandes. Su diseño orientado a objetos es imprescindible al desarrollar y mantener grandes proyectos.

Sí, CI y CakePHP me ayudaron a desarrollar más rápido que con PHP simple. Sin embargo, hay marcos mucho más poderosos. Escucho y veo cosas buenas sobre Symphony. Hay bastantes más. Estoy seguro de que otros los señalarán.

+0

Disculpa, mezclé CakePHP con Code Igniter. He usado CakePHP poco antes de dejarlo, ya que parecía demasiado restrictivo y automático. –

3

Como usted está pidiendo opiniones, entonces tengo que decir que aconsejo EN CONTRA CakePHP.

Mi mayor queja es que todavía usa PHP4 (escrito y generado en código). Entonces, ¿por qué retroceder? Es compatible con PHP5, pero el marco en sí mismo gira en torno a PHP4.

Recomendaría echar un vistazo a Symfony o Zend. Symfony es el mejor si desea tener más estructura en su lugar: lo obliga a cumplir con la estructura de MVC que ha establecido.

La alternativa es Zend, pero es más un marco de "hágalo usted mismo" o más bien un conjunto de bibliotecas. Tienes que armarlo todo por tu cuenta, y no tiene una estructura estricta como Symfony.

Obviamente, hay otros marcos, pero recomiendo el precedente. Otro que es posible que desee ver es Codeigniter.

+0

Ah, pensé que estaba usando php5, ¿estás seguro de eso? – kaklon

+0

Es compatible con 'php5', pero todo el framework está escrito usando' php4'. Toda la generación de código es 'php4'. Así que, sí, técnicamente podrías escribir una biblioteca 'php5' que funcionaría con ella, pero si todos tus modelos se generan en' php4', de alguna manera se derrota el propósito. – xil3

+0

Consulte el controlador generado: [http://book.cakephp.org/view/955/Controllers](http://book.cakephp.org/view/955/Controllers) - es PHP4. O un modelo de ejemplo: [http://book.cakephp.org/view/1057/Model-Attributes](http://book.cakephp.org/view/1057/Model-Attributes) - No veo ningún indicación de PHP5 en cualquiera de esos, ¿verdad? :) – xil3

2

CakePHP intenta abstraer la base de datos, por lo que se escribe muy poco SQL (sin embargo, se escriben muchos fragmentos de SQL).

El proceso básico es definir sus modelos, luego definir la relación entre los modelos (hasOne, belongsTo, hasMany, hasAndBelongsToMany). Puede poner cualquier condición o orden predeterminado en estas asociaciones que desee. Luego, cada vez que recupera una fila de la base de datos, cualquier fila asociada se recupera automáticamente. Es muy fácil y poderoso.

Todo viene con un montón de opciones de configuración, que le dan más flexibilidad. Por ejemplo, al obtener datos, hay una opción de recursión que toma un número entero. Este valor es cuántas asociaciones Deep Cake debería obtener datos. Entonces, si quisiste buscar a un usuario con todos sus datos asociados, y todos los datos unidos a ESO, es trivial.

Casi cualquier cosa se puede anular el definido sobre la marcha, y siempre se puede recurrir a la escritura de su propio SQL, así que no hay nada de la torta le impide hacer ...

No he encontrado mucho uso para andamios La respuesta a su pregunta es sí, se completará automáticamente las listas desplegables unidas, etc. Pero nunca lo he usado como base para construir una interfaz. Tiendo a usar una herramienta de base de datos para poblar datos desde el principio en lugar de andamios.

He creado y también tengo varias aplicaciones web en CakePHP, y es sin dudas más rápido que 'rodar las suyas'. ¡Pero creo que eso es cierto para cualquier marco decente!

Lamentablemente, uno de los puntos más débiles es la documentación. A menudo necesita buscar respuestas en Google ya que la documentación oficial es un poco impredecible a veces.

+0

xil3 es correcto que CakePHP todavía es compatible con PHP4, sin embargo, uso CakePHP exclusivamente en un entorno PHP5 y funciona perfectamente bien, y puede beneficiarse de todas las ventajas de PHP5. Por ejemplo, puede declarar las funciones de controlador privadas si desea agregar funciones que no están destinadas a tener vistas. – Botman

+0

ACL es también la funcionalidad principal ahora, y lo ha sido durante bastante tiempo: http://book.cakephp.org/view/171/Access-Control-Lists – Botman

7

Realmente depende de su definición de "grande". ¿Te refieres a grandes conjuntos de datos? ¿Un modelo de dominio muy complejo?¿O solo muchos controladores/acciones diferentes?

Escribir/Leer datos.

Cualquier cosa que pueda hacer con SQL simple puede hacerlo en CakePHP. Puede que no siempre sea muy agradable hacerlo, pero en el peor de los casos no es peor que SQL directo.

Pero realmente no debería estar pensando en consultas. Deberías pensar en tu modelo de dominio. CakePHP implementa el patrón de registro activo. Funciona muy bien si su modelo de dominio se adapta muy bien a un patrón de registro activo. Pero si no lo hace, entonces no recomendaría CakePHP. Si su modelo de dominio no se asigna a Active Record, pasará mucho tiempo luchando contra la forma Cake de hacer las cosas. Y eso no es divertido. Sería mucho mejor con un marco que implemente un patrón de Data Mapper (por ejemplo, Zend).

Andamio

andamiaje es temporal. Maneja claves externas (si las defines en el modelo y en la base de datos) pero eso es todo. No puedes modificar el andamio. ¡Pero, puedes hornearlos!

Cuando hornea un controlador o ve, básicamente está escribiendo el andamio en un archivo como punto de partida para su propia implementación. Después de hornear, puedes hacer lo que quieras. La desventaja de la cocción es que ya no se actualiza cuando cambian los modelos o la base de datos. Entonces, si hornea un controlador y vistas y agrega campos a su modelo, entonces necesita agregar esos campos manualmente a su controlador y ver el código.

velocidad de desarrollo

En mi caso, yo soy mucho más rápido el desarrollo de un sitio web en CakePHP a continuación en el código de formato. ¡Pero solo si Active Record se adapta a la aplicación! Ver mi primer punto. Incluso entonces, Cake es probablemente aún más rápido, pero sería aún más rápido con un mejor marco de adaptación.

Algunos otros pensamientos

grandes conjuntos de datos

Si tiene datos muy grandes y grandes resultados de la consulta a continuación, la torta puede ser un problema. Una operación find() desea devolver una matriz asociativa, por lo que todas las filas se leen, analizan y convierten en matrices. Si su conjunto de resultados es demasiado grande, se quedará sin memoria. CakePHP no implementa objetos ResultSet como muchas otras implementaciones de Active Record y eso es un inconveniente definitivo. Usted termina paginando manualmente a través de sus propios datos con subconsultas. Yuck. Wich me lleva al siguiente punto:

matrices

Aprende a amar porque CakePHP lo hace. Todo es una matriz y, a menudo, son grandes, complejos y profundos. Se pone realmente molesto después de un tiempo. No puede agregar funciones a las matrices por lo que su código es más complicado que si CakePHP hubiera utilizado instancias de objetos anidados. Las funciones que puede agregar a esos objetos pueden ayudar a mantener su código limpio.

rarezas e inconsistencias

CakePHP tiene algunas cosas malolientes desagradables reales ocultos en lo profundo de.Si Active Record se adapta a tu aplicación, probablemente nunca te topes con ellas, pero si tratas de moldear CakePHP en algo más complejo, entonces tendrás que luchar contra esto. Algunos ejemplos:

  • HABTM a través de un modelo personalizado utiliza la definición del otro lado de la relación en la que está trabajando.
  • Algunos lugares realmente extraños donde no se invocan sus disparadores de antes/después (por ejemplo, no de una actualización)
  • comportamiento impar de Modelo-> campo(). Siempre consulta desde la base de datos. Por lo tanto, tenga cuidado al actualizar los datos del modelo sin guardarlos de inmediato en la base de datos. Algunas funciones de CakePHP obtienen datos de Model -> $ _ data y algunos usan Model -> field(). El resultado puede ser completamente diferente, lo que resulta en algunos errores muy difíciles de rastrear.

En resumen

, lo recomiendo CakePHP incluso para los sitios de "grandes", siempre y cuando su modelo de dominio encaja muy bien en la parte superior de Active Record. Si no, elige un marco diferente.

1

Simplemente vaya con Yii framework, es el mejor en esta categoría.

+0

¿Más información sobre por qué es mejor? :-) – nino

+0

@nino sure: http://www.yiiframework.com/performance/ – dynamic

+0

Cualquiera puede arrojar un gráfico como ese para comparar marcos. ¿Hay acceso a los datos brutos para garantizar que las pruebas comparen manzanas con manzanas? –

Cuestiones relacionadas