Pasar de un marco a un no marco [cerrado]

89

He estado desarrollando en PHP durante unos 8 años como hobby. En 2009, tomé codeigniter y desde entonces no he logrado desarrollar un solo proyecto.

Encuentro que me ralentiza tratando de averiguar cómo modificarlo para que funcione de la manera que quiero, cuando si estuviera trabajando en PHP puro, lo sabría o podría encontrar rápidamente un fragmento de código.

Probé CodeIgniter, Kohana y Symfony. Me encanta la facilidad de uso (y también comencé a usar doctrine como un ORM que aceleró enormemente el trabajo de mi base de datos), pero encuentro que los proyectos me están tomando de 3 a 4 veces más tiempo que en PHP puro. Me aburro y me frustro cuando no puedo encontrar una solución a un problema que resolví previamente en PHP puro.

¿Alguien ha pasado de usar marcos a un enfoque sin marco? ¿Existe algo parecido a un marco de seguridad básico (evitar XSS, filtrar los datos publicados, proporcionar una función de limpieza para usar con bases de datos)? Creo que algo así me beneficiaría mucho más que un marco a gran escala. Creo que aprender a trabajar con frameworks me ha enseñado mucho, pero estaría más feliz trabajando con mi propio código.

Alex C
fuente
5
Me encantaría saber más acerca de por qué dijiste sobre el uso de framework que toma 3-4 veces del tiempo en comparación con no-framework ... ¿te importaría profundizar más sobre eso?
Lukman
7
Uno de los beneficios de CI, o de cualquier marco, es que lo fuerza a un patrón de diseño que es más fácil de mantener para los desarrolladores que no están acostumbrados a su estilo de desarrollo particular. Además, en entornos más grandes, separar las vistas de la lógica es esencial para que los gurús de CSS puedan hacer lo suyo sin pisar los dedos de los desarrolladores.
Kyle Noland
1
Gran pregunta, si alguna vez tengo una opción, uso PHP puro. Pero la mayoría de las veces, las personas para las que trabajo quieren que use un framework, así que solo les cobro las horas extra :) Siento que mi propio código es legible, bien organizado y estable. Quizás temen tener que mantenerlo a bordo si ocurre un desastre y todo el código está en un estado "su-marco-personalizado-que-nadie-más-puede-leer".
SSH Este

Respuestas:

101

Las versiones actuales de PHP5 incluyen gran parte del marco de seguridad que está buscando como parte de la biblioteca estándar.

Si acepta HTML como entrada, le recomiendo tomar HTML Purifier y llamarlo a través de una línea FILTER_CALLBACK en su configuración filter_input_array. Su enfoque de seguridad de entrada basado en listas blancas constituye una excelente (y muy poderosa) primera línea de defensa contra XSS.

Por lo que puedo decir, PHP no viene con un mecanismo para protegerse contra la falsificación de solicitudes entre sitios , pero estoy seguro de que Google puede ayudarlo con eso. Las hojas de trucos de seguridad de OWASP incluyen una sección si desea implementar su propia protección.

Por curiosidad, decidí comenzar también a buscar componentes independientes y esto es lo que he encontrado hasta ahora:

Plantillas:

  • Herencia de plantilla PHP (PHP regular más herencia de plantilla)
  • TWIG ( sintaxis de estilo Django / Jinja2 / Liquid que incluye autoescape y sandboxing. Se compila en PHP en caché para mayor velocidad).
  • Dwoo (Un sucesor más rápido y con más funciones de PHP5 de Smarty . Incluye un sistema de compatibilidad para las plantillas Smarty existentes).

Cosas que todavía no he analizado correctamente:

  • Despacho de ruta (solo se encontraron RouteMap y Net_URL_Mapper hasta ahora. Gracias, cweiske).
  • ORM (en caso de que el PDO no sea lo tuyo)
ssokolow
fuente
Gracias, todos muy buenos consejos y voy a empezar a investigarlos ahora.
Alex C
4
Cambie Smarty por Dwoo si necesita un motor de plantillas. En cuanto a características, es casi idéntico a Smarty, pero no derrite las CPU.
Phil Sturgeon
pear.php.net/package/Net_URL_Mapper es un despachador de rutas.
cweiske
4
Si los frameworks le ralentizan, evite los motores de plantillas, Smarty en particular, como la plaga. Tienen buenas intenciones, pero simplemente crean una forma nueva y no intuitiva de hacer algo que PHP ya hace.
Night Owl
Depende de lo que esté tratando de lograr y por qué el marco lo ralentiza.
ssokolow
10

No creo en los frameworks ... he trabajado en muchos de ellos.

Razones para odiar los frameworks MVC:

1) Código hinchado, compro clases premium que me ayudan en el desarrollo. Como clases de formulario o clases SQL.

2) Creo que los frameworks MVC no son fáciles de transportar, especialmente cuando se usan administradores de dependencia.

3) Creo que en realidad escribes más código con un marco MVC que si tuvieras que usar una plantilla con un montón de clases útiles que manejan la autenticación, etc.

4) La mayoría de los marcos también atienden solo una o dos bases de datos de forma nativa.

Sugeriría encontrar un marco de formulario con autenticación y editor de texto y un marco SQL como madoo + una clase de correo electrónico ...

El 90% de su aplicación son siempre formularios, CLASES sql y ajax; el resto se puede adquirir cuando sea necesario

Soy minimalista y lucho con la idea de tener código en mi aplicación que no está haciendo nada ... por si acaso lo necesito, no me funciona.

Jugger
fuente
Con respecto a la afirmación "Compro clases premium": ¿de dónde compra dichas clases y con qué fines? Gracias.
dotancohen
Estoy de acuerdo. También hay un impacto considerable en el rendimiento con muchos marcos.
developerbmw
8

Con tanta experiencia a sus espaldas, debe tener su propio conjunto de bibliotecas favoritas, seleccionarlas a mano y crear su propio marco simple. Marco o ningún marco (y cuál en ese) depende del tipo de proyecto en cuestión, ningún guante sirve para todos. Por lo tanto, le sugiero encarecidamente que si siente que los marcos existentes lo están ralentizando, dedique algo de tiempo y cree un marco que funcione según sus necesidades.

Sabeen Malik
fuente
8

Basado en su declaración de que ha estado usando PHP como pasatiempo, así como en su declaración de perfil "Llegando lentamente", esto parece un problema de curva de aprendizaje. No parece tener la profundidad y amplitud de experiencia para a) entender cómo trabajar dentro de la estructura que impone el marco yb) por lo tanto, no puede beneficiarse de las eficiencias que el marco permite.

Le insto a que lo siga. Vuelve al principio con los videos tutoriales. Busque y lea el código de otras personas hasta que lo comprenda. Cree sus proyectos de abajo hacia arriba: comience de manera simple y agregue funcionalidad. Siga los foros, tratando de responder las preguntas usted mismo antes de leer las respuestas.

He estado programando profesionalmente durante casi 20 años, en una variedad de plataformas, y todavía me tomó un tiempo sentirme cómodo con CI. Pero ahora que lo soy, no volvería a PHP puro (para mis propios proyectos) a menos que tuviera un sitio de escala suficiente que expusiera problemas de rendimiento cuantificables (piense en Twitter).

coolgeek
fuente
Todavía estoy en el límite si me gustan o no los frameworks también. Definitivamente veo el punto del OP, pero veo el tuyo también ... aprender un marco es como aprender un idioma completamente nuevo. Tienes que entrar en la forma de hacer las cosas del framework. Sin embargo, otra cosa con la que lucho es si mi filosofía de cómo se deben hacer las cosas es diferente a la del marco. Todavía estoy tratando de encontrar uno que se adapte a mí. (No puedo esperar a .NET MVC3)
mpen
Hasta el momento, no conozco ningún otro marco, por lo que no puedo hablar con generalidad. Pero usar un marco no es una propuesta de todo o nada. Por ejemplo, considero que las bibliotecas de almacenamiento en caché de CI (página, base de datos) son insuficientes y no son fácilmente escalables. Así que uso una biblioteca de caché de terceros (Phil Sturgeon) y estoy bastante contento con ella.
coolgeek
Otra ventaja significativa de seguir con él es que hace que sea relativamente fácil aprender posteriormente otros marcos. Esta es la razón por la que con frecuencia ve ofertas de trabajo que especifican un marco en particular (por ejemplo, CI), pero que indica que se considerará la experiencia con marcos similares (por ejemplo, Zend o Symfony).
coolgeek
2

Zend Framework es realmente excelente para eso. Puede usar tanto o tan poco como desee. Todo está codificado en php y de código abierto, por lo que puede piratearlo y hacerlo suyo. Los diferentes componentes no dependen unos de otros tanto como en otros marcos.

Puede construir usted mismo un marco simple usando algunos componentes de Zend sin ningún problema.

¡Compruébalo !

Iznogood
fuente
3
Está tratando de alejarse de un marco.
WarmWaffles
1
@WarmWaffles. Por eso hablé sobre el uso de partes de ZF. Seguro que no esperas que el chico reinvente la rueda para todo.
Iznogood
2
Iznogood tiene muy buen punto. ZF es más que un marco. Encontré que los paquetes son extremadamente útiles para realizar muchas tareas comunes, y no hay nada al respecto que lo obligue a usar sus patrones MVC o sus métodos de acceso a la base de datos o realmente cualquier cosa. Por supuesto, también puede optar por módulos de Pear.
Bob Baddeley
2
Es una biblioteca sí que también luce un marco. Sin embargo, está buscando algo fácil de usar, y la última vez que verifiqué el espacio de nombres de Zend está desordenado y es difícil escribir. @Bob_Baddeley PEAR es una buena sugerencia
WarmWaffles
@WarmWaffles Bueno para cada uno lo suyo, supongo. Tal vez podría volver a verificar Zend está en 1.10.xy ahora bastante diferente entonces decir 1.8.
Iznogood
2

Sé exactamente cómo te sientes. Empecé hace 4 ~ 5 años en PHP (vengo de Delphi, lol), y comencé en php puro. Lo que tenía de vuelta era un "Panel CMS como" que acababa de leer todos los campos de las tablas y crear el formulario. Después de un tiempo llegué de alguna manera al conocimiento de PHP Frameworks, probé CakePHP por primera vez y no me gustó, luego me metí en Yii que, en mi opinión, es bastante intuitivo y fácil de usar (con su generador Gii es bastante bueno). Probé Symfony, ZF2, Laravel, Yii2-Beta y algunos frameworks para RAD, pero todavía no me sentía lo suficientemente rápido como antes de los frameworks.

Sucedió que desarrollé mi propio marco (fue naturalmente, no exactamente que un día me desperté y dije "voy a crear un nuevo marco", pasó con el tiempo). Sé que es una mala mala práctica y un movimiento de "reinvención de la rueda", PERO, ahora desarrollo mis proyectos mucho más rápido (más que PHP solamente).

Dado que su código es un MESS total, comencé hace aproximadamente un mes a reformular mi marco, ahora usa composer, sigue las reglas comunes que existen entre los marcos php, es MVC.

¿Por qué estoy reformulando? Porque si alguien necesita reparar un proyecto mío, no será cosa de otro mundo.

Entonces te entiendo.

Mi consejo es que prepares tus herramientas (llámalo framework, una aplicación preestablecida o como sea que la gente lo nombre), y úsalo de la manera que te sientas mejor, pero sigue algunas reglas comunes (como MVC, cosas "fáciles de modular" que Puede reemplazar en caso de rotura.

Ricardo Fiorani
fuente
1

Para una seguridad básica, utilizo un método de filtro personalizado que envuelve mis superglobales . Es necesario acostumbrarse a su sintaxis, pero es más simple que la API de PHP filter_var () y no te permite desinfectar:

 $_GET->text("inputvar") or $_POST->name["field"]

También permitió el escape $ _REQUEST-> sql () en línea. Pero para el trabajo de la base de datos, siga usando SQL parametrizado o su DAL / ORM de su elección.

mario
fuente
Definitivamente es una solución inteligente, pero no estoy seguro de por qué cree que la API de filtro es engorrosa. En todo caso, creo que filter_input_array () es excelente. (Sobre todo porque hace que sea fácil de definir todas las entradas para un tipo de solicitud dada en un solo lugar de una manera razonablemente declarativa Nunca se debe subestimar el beneficio de ese tipo de cosas..)
ssokolow
@ssokolow: De hecho, filter_input_array () es ingenioso para hacerlo de una sola vez. Sin embargo, ya hay demasiada flexibilidad en las funciones filter_ *, y demasiados parámetros no le convienen. Por eso creo que la gente lo está evitando (aunque técnicamente es una buena solución).
mario
Quizás. Creo que parte del problema es que, además de ser un recién llegado a un mundo en el que mucha gente todavía tiene libros PHP4 en sus estantes, no está publicitado, los documentos oficiales no son lo suficientemente claros y los documentos de W3Schools que tienden a compartir los mejores resultados de Google no son lo suficientemente completos.
ssokolow
1

Hice un estudio de un día de ToroPHP y lo encontré bastante bueno. Es un marco minimalista dirigido a aplicaciones RESTful. Esto hace posible mantener el código del lado del servidor modular, sin tener que lidiar con la hinchazón de ningún marco.

Kinjal Dixit
fuente
1

No sé qué te está preocupando, pero codeigniter es un gran framework. Tiene buena documentación y como mucha gente usa codeigniter, encontrarás toda la ayuda en su documentación, foro o en stackoverflow. He trabajado en muchos frameworks ( Codeigniter, CakePHP, Zend, Spring 3.0, Ruby on Rails), pero debo decir que codeigniter tiene la mejor documentación.Hay muchas cosas en codeigiter que se manejan automáticamente y no tienes que preocuparte por la seguridad. Trabajar en el núcleo de PHP es como reinventar la rueda. Bueno, lo más importante es que pasar de un núcleo a un marco requerirá mucho esfuerzo una vez que esté acostumbrado, comenzará a amarlo.Además, Ruby on rails también es un gran marco una vez que conozca sus entresijos, puede tener doble velocidad.

Sachin Prasad
fuente
2
Han pasado poco más de dos años desde que publiqué esto y, de hecho, trabajé con PHP puro durante un tiempo, pero desde entonces he vuelto a PHP: tienes razón, es increíblemente fácil de usar. Mi configuración preferida actual es CI, phpActiveRecord para bases de datos y Twig para plantillas.
Alex C
Sí, phpActiveRecord se ve bien. ¿Alguna vez has probado Laravel? ( laravel.com ) Creo que encontrará que tiene lo mejor de CI, phpActiveRecord y Twig integrados de forma predeterminada. Yo mismo he sido desarrollador de CakePHP, pero últimamente estoy mirando con interés a Laravel.
Simon East