php frameworks

php - ¿Symfony es un buen marco para aprender?



twig parent block (19)

Nunca utilicé ningún marco público (siempre usé frameworks internos, o el mío propio). Veo que Symfony tiene muchos tutoriales y buena documentación, y parece tener todo, desde CRUD hasta el manejo de múltiples idiomas.

¿Crees que es un buen marco para construir un sitio web que es más complicado que un blog *? Si no, ¿cuál es otra alternativa?

* Sitio web con inicio de sesión para administrar datos financieros.


@Daok

Yaml solo se usa en el ORM para definir su esquema. Realmente no define ningún comportamiento. Propel se basa en el código generado y utiliza el schema.yml para crear los modelos.

Funciona en OS X también.

También tiene una capa de almacenamiento en caché bastante buena.


Sí, es un gran marco. Lo he usado para construir varios sitios de diversas complejidades. Uno es un sitio para pequeñas empresas con solo un puñado de páginas y un formulario de contacto. Otro es un sitio complejo de entrega de archivos con miles de usuarios y decenas de miles de transacciones por mes. Varios de mis clientes lo usan: uno tiene más de 100 mil usuarios.

Hay una buena comunidad de usuarios, irc generalmente tiene personas útiles, y hay varios complementos para facilitar las tareas comunes. Tiene un generador de administrador muy agradable. El ORM (Propel) es un poco prolijo, pero permite la mayoría de las funciones comunes de la base de datos: restricciones, claves externas, índices, etc. Los objetos Form en 1.1 son agradables.

Las quejas más grandes: es prolijo y pesado en directorios. El uso excesivo de los archivos de configuración puede hacer que las cosas sean un poco difíciles de entender.

Definitivamente recomendado.


Symfony no funciona con PHP 4. Las aplicaciones de alojamiento de sistemas específicas de PHP4 no podrán usar Symfony. Si PHP4 no es un requisito, Symfony es una muy buena opción.


Todavía no estoy seguro porque no veo mucho proyecto que haya usado ese marco ... CakePHP y Zend se ven más populares, pero Symfony parece interesante ...


Zend parece superior, pero realmente carece de documentación.


No veo la complejidad de la aplicación como un obstáculo para adoptar Symfony.

No creo que nadie elija Symfony por razones de alto rendimiento, pero lo mismo es cierto para todos los frameworks principales. Una vez dicho esto, no hemos tenido absolutamente ningún problema de rendimiento.

Probablemente no sea el mejor para compararlo con Zend, Symfony es un framework completo, debes estar preparado para hacer las cosas a la manera de Symfony. Me pareció un placer usarlo. Recomiendo leer el libro oficial de Symfony (disponible en línea) en su totalidad antes de comenzar. Propel (symfonys ORM) fue un poco frustrante de aprender, pero funciona bien una vez que superas la curva de aprendizaje.

Está realmente lleno de cosas útiles y mejora cuanto más lo usas.


Symfony es la mejor opción. Trabajé con él en muchas aplicaciones y es el mejor framework que he usado. La documentación y la ayuda de la comunidad son muy útiles y el marco en sí mismo es muy fácil de aprender y de trabajar.


Como mencionó Gaurav, Symphony no es compatible con PHP4. Si está buscando un marco de PHP decente, es posible que desee verificar Code Igniter.


Hemos estado usando sf en el trabajo durante los últimos 6 meses y hasta ahora estoy bastante impresionado con él. Hay una comunidad de desarrollo de complementos bastante saludable construida a su alrededor y el marco principal parece desarrollarse de manera bastante rápida. La versión 1.2 que saldrá en diciembre hará que el marco sea oficialmente independiente del uso de Propel o Doctrine para la capa ORM, que ofrece una gran flexibilidad para el usuario final. La curva de aprendizaje inicial es un poco abrupta, ya que definitivamente hay una "manera de Symfony" a la que te tienes que acostumbrar, pero al igual que con otros frameworks completos como Rails, una vez que entiendes de qué se trata, encuentro que el desarrollo es bastante rápido.


Para las alternativas que he usado CakePHP. En los últimos 10 meses, he desarrollado algunas aplicaciones complejas de nivel de blog con aplicaciones para uso interno. Fue fantástico para eso. Es fácil de acceder, no necesita un php muy reciente, los documentos son decentes y al no encontrar una respuesta, generalmente se encuentra en la lista de correo.

El principal problema que tuve con Cake fue que no sentía que tuviera tanto control sobre su ORM, y aunque han mejorado recientemente en esa área con la adición de soporte para cláusulas grupales, aún no puedo especificar combinaciones explícitamente. Esto lleva a situaciones en las que puede tener un bajo rendimiento porque el orm decide que necesita hacer un montón de consultas para obtener datos de los modelos relacionados. O puede usar hacks como este http://teknoid.wordpress.com/2008/07/17/forcing-an-sql-join-in-cakephp/ que funciona, pero es un poco feo. A medida que las aplicaciones comenzaron a crecer y más y más modelos se agregaron al esquema, comencé a encontrarme con la situación cada vez más a menudo, así que decidí cambiar a algo que soportara un ORM con más funciones (tuve otros productos con pastel, pero la mayoría eran bastante menores). Me molestó por un tiempo, pero me conformé con la idea de que el pastel es una excelente herramienta, simplemente no es la herramienta adecuada para mí.

Miré principalmente a Zend y Symfony (solo revisé los documentos CodeIgniter y vi el screencast). Terminé recogiendo Symfony porque parecía tener el equilibrio adecuado de potencia y facilidad de uso. Puede usar Doctrine y Propel, hay muchos complementos y muchos documentos. Me abroché el cinturón de seguridad listo para lidiar con los millones de archivos yml que pensé que tendría que editar, pero para mi sorpresa no tuve que configurar demasiado. Zend parece bastante poderoso, pero parece demasiado de Do It Yourself para mis proyectos actuales. Por lo que leí, también puedo usar Zend libs dentro de mis proyectos Symfony sin demasiados problemas, así que sellé el trato.

Entonces, en resumen, lo que elija dependerá de sus necesidades. Si te ves realizando consultas complejas, probablemente deberías elegir una que tenga una muy buena biblioteca de base de datos o al menos te permita usar fácilmente una alternativa sin renunciar a las sutilezas del marco (entiendo que CodeIgniter puede usar doctrina, por ejemplo).


Me gusta codeigniter personalmente, porque es muy fácil de codificar y está muy bien documentado.


Symfony es un buen marco, que utiliza aproximadamente los mismos patrones de diseño que componen Ruby on Rails, pero no es "PHP on Rails", ya que tiene sus propios pros y contras.

A partir de Symfony 1.2, Doctrine es el segundo ORM, que viene empaquetado con él. Para versiones anteriores hay complementos.

Acerca de todo el negocio de YAML: si prefiere los archivos de configuración XML o cualquier otro formato de archivo, puede conectarlos. YAML es solo el predeterminado.

Por último, pero no menos importante, puedes salir de la estructura por defecto (aún tienes que configurar eso). La documentación (cf. el Symfony Book) establece eso explícitamente.

Ultimamente, es una cuestión de gusto y preferencia personal. Mi consejo sería leer el libro de Symfony (puedes obtenerlo gratis del sitio web del proyecto) y tratar de seguir el proyecto de ejemplo. Si te gusta eso, úsalo. Si no, intente con otra cosa.


Parece tener una buena documentación pero en detalles cuando tratas de seguirla, es una pesadilla.


Symfony 2

Symfony2 ha abordado muchos de los problemas con Symfony 1.

  • Permite mucha flexibilidad sobre cómo se configura el proyecto.

  • Es muy rápido y comparable a otros marcos web

  • Propel y Doctrine son compatibles, pero no se aplican. El creador puede elegir usar lo que quiera como ORM. O ninguno en absoluto.

  • Algunos de los componentes de Symfony2 ahora se están implementando en proyectos grandes como Drupal y PhpBB.

Symfony 1

Symfony 1 parecía realmente bueno, pero tenía algunas limitaciones.

Estaba pulido y tenía buena documentación. No había nada específicamente mal con eso. Parecía que todo era más difícil de lo que era necesario.

  • El patrón de registro activo fue agradable, pero finalmente comenzó a ser un cuello de botella de rendimiento.

  • Propel hizo que las consultas SQL complejas fueran bastante difíciles. Creole le permitió "construir" preguntas de manera OO, pero escribir SQL a mano hubiera sido mucho más fácil.

  • Hay una fuerte preferencia por la configuración sobre el código (Symfony ama yaml). Esto significa que tendrá que buscar constantemente qué archivo de configuración y qué opción necesita cambiar. Si mantiene su definición de configuración en el nivel incorrecto (por ejemplo, en el nodo padre incorrecto), entonces no sabrá por qué las cosas no funcionan.

  • La documentación parecía un poco tutorial enfocada. A menudo solo quería una referencia realmente sólida. Esto a menudo estaba relacionado con buscar una definición de configuración.

  • La estructura del marco es bastante rígida. Tienes que implementar las cosas exactamente de la manera que los diseñadores intentaron.

  • El marco terminó siendo bastante lento. Estábamos tratando de manejar una cantidad moderada de tráfico (tal vez 50,000 únicos al día) y el servidor que usamos simplemente no pudo soportarlo.

Muchos de estos problemas desaparecerían después de algunos proyectos de Symfony. Si tuviera que buscar un nuevo framework, entonces probablemente miraría CodeIgnitor, que es mucho más simple y liviano.

Después de Symfony terminé escribiendo un marco muy pequeño para imponer un patrón MVC. Me gustó esto mucho mejor ya que pude desarrollar el código de marco para que coincida con mis problemas específicos. Esto no es realmente lo "correcto" que hacer, pero funcionó para mí. Lo he usado en aproximadamente media docena de proyectos y he agregado y recortado mi código para mantenerlo liviano.


Aquí hay información que acabo de encontrar:

  • Diseño impulsado por MVC
  • ORM usando Doctrine o Propel
  • Archivos Yaml para configuración
  • Trabaja en Linux y Windows
  • Usa diseño y plantilla

He intentado con CakePHP, CodeIgniter, ZendFramework y Yii. Todos ellos tienen pros y contras, pero debo admitir que me gusta Symfony más porque es muy flexible, puedes elegir solo los componentes que requieres, de manera diferente a los otros frameworks que mencioné. Bueno, para ser justos, también puedes usar las bibliotecas de Zend.

Además, Symfony está bien documentado, y tiene una gran comunidad. Su curva de aprendizaje es una curva de aprendizaje relativamente empinada, pero cuando dominas el camino hacia el trabajo, verás que es realmente útil.



Diría YII después de probar todo CakePHP, Zend y Symphony.

Tiene las características como MVC, DAO / ActiveRecord, almacenamiento en caché, autenticación y control de acceso basado en roles, andamios, pruebas, etc. Es liviano y tiene un poderoso soporte de almacenamiento en caché. La seguridad es parte de este trabajo de marco. Incluye validación de entrada, filtrado de salida, inyección SQL y prevención de scripts entre sitios. También Yii es mucho más rápido porque usa una técnica de carga diferida. No habilita una funcionalidad hasta o a menos que se haya invocado por primera vez. Por ejemplo, no crea un objeto a menos que se llame al objeto por primera vez. Otros marcos sufren el golpe de rendimiento porque habilitarían una funcionalidad sin importar si se usa o no durante una solicitud.

Yii te ofrece la alegría del desarrollo en su verdadero sentido con la libertad de modificar cada aspecto sin la extraña magia que se pretende mantener oculta como en el caso de decir CakePHP.

Al final, es solo una opinión personal, supongo.


Encuentro que todo el mundo solo habla de las ventajas del marco Symfony, pero cuáles son las desventajas. En mi experiencia personal, odio el sistema de caché de symfony2 que devorará tu cerebro en el entorno de desarrollo. Su desarrollo es muy lento y, por supuesto, es muy molesto.

No puede volver a cargar la página para ver los cambios cada vez que guarde un cambio en el archivo debe dirigirse a la terminal borre la caché y espere unos 10 segundos y aparece el problema de cambio de permisos si trabaja en mac y luego espera de nuevo unos segundos para ver realmente el cambio.

Literalmente, puedes desarrollar dos aplicaciones usando zend framework al mismo tiempo que puedes usarlas para desarrollar una aplicación en symfon2 asumiendo la misma aplicación.

Además, hay otros inconvenientes, pero creo que es la peor parte de Symfony2. Nunca está optimizado para el desarrollo. ¿Cómo tiene sentido como marco de producción optimizado si uno no puede desarrollarse correctamente?