Passer d'un cadre à un sans cadre [fermé]

89

Je développe en PHP depuis environ 8 ans comme passe-temps. En 2009, j'ai repris codeigniter et depuis je n'ai pas réussi à faire développer un seul projet.

Je trouve que cela me ralentit en essayant de trouver comment le modifier pour qu'il fonctionne comme je le souhaite, alors que si je travaillais en PHP pur, je le saurais ou je pourrais trouver rapidement un extrait de code.

J'ai essayé CodeIgniter, Kohana et Symfony. J'adore la facilité d'utilisation (et j'ai également commencé à utiliser la doctrine comme ORM, ce qui a considérablement accéléré le travail de ma base de données), mais je trouve que les projets me prennent 3 à 4 fois plus de temps en PHP pur. Je m'ennuie et me frustre quand je ne trouve pas de solution à un problème que j'ai déjà résolu en PHP pur.

Quelqu'un est-il revenu de l'utilisation de cadres à une approche sans cadre. Existe-t-il quelque chose qui ressemble à un cadre de sécurité de base (empêcher XSS, filtrer les données publiées, fournir une fonction de nettoyage à utiliser avec les bases de données)? Je pense que quelque chose comme ça me profiterait beaucoup plus qu'un cadre à grande échelle. Je pense qu'apprendre à travailler avec des frameworks m'a beaucoup appris, mais je serais plus heureux de travailler avec mon propre code.

Alex C
la source
5
J'aimerais en savoir plus sur les raisons pour lesquelles vous avez dit que l'utilisation du framework prend 3 à 4 fois le temps par rapport à l'absence de framework. Voulez-vous en dire plus?
Lukman
7
L'un des avantages de CI, ou de tout autre framework, est qu'il vous oblige à adopter un modèle de conception qui est plus facile à maintenir pour les développeurs non habitués à votre style de développement particulier. De plus, dans des environnements plus grands, séparer les vues de la logique est essentiel pour que vos gourous CSS puissent faire leur travail sans marcher sur les orteils des développeurs.
Kyle Noland
1
Bonne question, si jamais j'ai le choix, j'utilise du PHP pur. Mais la plupart du temps, les gens pour qui je travaille veulent que j'utilise un framework, alors je leur charge juste les heures supplémentaires :) J'ai l'impression que mon propre code est lisible, bien organisé et stable. Peut-être qu'ils craignent de devoir vous garder à bord en cas de sinistre et que tout le code est dans un état "votre-cadre-personnalisé-que-personne-d'autre-ne-peut-lire".
SSH ce

Réponses:

101

Les versions actuelles de PHP5 incluent une grande partie du cadre de sécurité que vous recherchez dans le cadre de la bibliothèque standard.

Si vous acceptez le HTML comme entrée, je vous recommande de saisir HTML Purifier et de l'appeler via un FILTER_CALLBACK ligne dans votre configuration filter_input_array. Son approche de la sécurité des entrées basée sur la liste blanche constitue une excellente (et très puissante) première ligne de défense contre XSS.

Autant que je sache, PHP n'est pas livré avec un mécanisme de protection contre falsification de requêtes intersites , mais je suis sûr que Google peut vous aider. Les cheatsheets de sécurité OWASP incluent une section si vous souhaitez mettre en œuvre votre propre protection.

Par curiosité, j'ai décidé de commencer également à regarder des composants autonomes et voici ce que j'ai trouvé jusqu'à présent:

Création de modèles:

  • Héritage de modèle PHP (PHP normal plus héritage de modèle)
  • TWIG (Django / Jinja2 / Liquide syntaxe de style y compris autoescape et sandboxing. Compile vers PHP mis en cache pour plus de vitesse.)
  • Dwoo (Un successeur PHP5-ish plus rapide et plus fonctionnel de Smarty . Inclut un système de compatibilité pour les modèles Smarty existants.)

Des choses que je n'ai toujours pas examinées correctement:

ssokolow
la source
Merci, tous de très bons conseils et je vais commencer à les examiner maintenant!
Alex C
4
Remplacez Smarty par Dwoo si vous avez besoin d'un moteur de création de modèles. Sur le plan fonctionnel, il est presque identique à Smarty mais ne fait pas fondre les processeurs.
Phil Sturgeon
pear.php.net/package/Net_URL_Mapper est un répartiteur d'itinéraire.
cweiske
4
Si les frameworks vous ralentissent, évitez les moteurs de création de modèles, Smarty en particulier, comme la peste. Ils signifient bien, mais ils créent simplement une nouvelle façon non intuitive de faire quelque chose que PHP fait déjà.
Night Owl
Cela dépend de ce que vous essayez d'accomplir et de la raison pour laquelle le cadre vous ralentit.
ssokolow
10

Je ne crois pas aux frameworks ... J'ai travaillé dans beaucoup d'entre eux.

Raisons de détester les frameworks MVC:

1) Code bloat, j'achète des classes premium qui m'aident dans le développement. Tels que les classes de formulaire ou les classes SQL.

2) Je pense que les frameworks MVC ne sont pas facilement portables, en particulier lors de l'utilisation de gestionnaires de dépendances.

3) Je pense que vous écrivez en fait plus de code avec un framework MVC alors si vous deviez utiliser un passe-partout avec une tonne de classes utiles qui gèrent l'authentification, etc.

4) La plupart des frameworks ne prennent en charge qu'une ou deux bases de données nativement.

Je suggérerais de trouver un cadre de formulaire avec authentification et éditeur de texte et un cadre SQL comme madoo + une classe de messagerie ...

90% de votre demande est toujours des classes de formulaires, sql et ajax - le reste peut être acquis en cas de besoin

Je suis minimaliste et je lutte avec l'idée d'avoir du code dans mon application qui ne fait rien ... juste au cas où j'en aurais besoin, cela ne fonctionne pas pour moi.

Jugger
la source
Concernant la déclaration "J'achète des classes premium": d'où achetez-vous ces classes et à quelles fins? Merci.
dotancohen
Je suis d'accord. Il y a aussi un impact considérable sur les performances avec de nombreux frameworks.
developerbmw
8

Avec autant d'expérience derrière vous, vous devez avoir votre propre ensemble de bibliothèques préférées, les choisir manuellement et créer votre propre cadre simple. Framework ou pas de framework (et lequel à cela) dépend du type de projet à portée de main, aucun gant ne convient à tous. Donc, je suggère fortement que si vous sentez que les cadres existants vous ralentissent, passez du temps et proposez un cadre qui fonctionne selon vos besoins.

Sabeen Malik
la source
8

Sur la base de votre déclaration selon laquelle vous avez utilisé PHP comme passe-temps, ainsi que de votre déclaration de profil «Arriver lentement», cela semble être un problème de courbe d'apprentissage. Vous ne semblez pas avoir la profondeur et l'étendue de l'expérience pour a) comprendre comment travailler dans la structure que le cadre impose et b) vous êtes donc incapable de bénéficier des gains d'efficacité que le cadre permet.

Je vous exhorte à vous y tenir. Revenez au début avec les didacticiels vidéo. Trouvez et lisez le code d'autres personnes jusqu'à ce que vous le compreniez. Construisez vos projets de bas en haut - démarrez simplement et ajoutez des fonctionnalités. Suivez les forums en essayant de répondre vous-même aux questions avant de lire les réponses.

Je programme professionnellement depuis près de 20 ans, sur une variété de plates-formes, et il m'a encore fallu un certain temps pour me familiariser avec CI. Mais maintenant que je le suis, je ne retournerais pas au PHP pur (pour mes propres projets) à moins d'avoir un site d'une taille suffisante pour exposer des problèmes de performances quantifiables (pensez à Twitter).

coolgeek
la source
Je suis toujours à la limite que j'aime ou non les frameworks. Je vois clairement le point du PO, mais je vois le vôtre aussi ... apprendre un cadre, c'est comme apprendre une toute nouvelle langue. Vous devez entrer dans la manière de faire du cadre. Une autre chose avec laquelle je lutte, cependant, est de savoir si ma philosophie de la façon dont les choses doivent être faites est différente de celle du cadre. J'essaye toujours d'en trouver un qui me convient. (Je ne peux pas attendre .NET MVC3)
mpen
Pour le moment, je ne connais pas d'autres frameworks, donc je ne peux pas parler avec aucune généralité. Mais utiliser un framework n'est pas une proposition de tout ou rien. Par exemple, je trouve les bibliothèques de mise en cache de CI (page, base de données) insuffisantes et pas facilement évolutives. J'utilise donc une bibliothèque de cache tierce (celle de Phil Sturgeon) et j'en suis plutôt content.
coolgeek
Un autre avantage important à s'en tenir à cela est qu'il est relativement facile d'apprendre par la suite d'autres frameworks. C'est pourquoi vous voyez fréquemment des offres d'emploi spécifiant un cadre particulier (par exemple, CI), mais indiquant que l'expérience avec des cadres similaires (par exemple Zend ou Symfony) sera prise en compte.
coolgeek
2

Zend Framework est vraiment super pour ça. Vous pouvez en utiliser autant ou aussi peu que vous le souhaitez. Tout est codé en php et open source afin que vous puissiez simplement le pirater et le personnaliser. Les différents composants ne dépendent pas les uns des autres autant que dans d'autres cadres.

Vous pouvez construire vous-même un framework simple en utilisant certains composants de Zend sans aucun problème.

Vérifiez -le!

Iznogood
la source
3
Il essaie de s'éloigner d'un cadre.
WarmWaffles
1
@WarmWaffles. C'est pourquoi j'ai parlé d'utiliser des parties de ZF. Vous ne vous attendez sûrement pas à ce que le gars réinvente la roue pour tout.
Iznogood
2
Iznogood a un très bon point. ZF est plus qu'un simple framework. J'ai trouvé les packages extrêmement utiles pour effectuer de nombreuses tâches courantes, et rien à ce sujet ne vous oblige à utiliser leurs modèles MVC ou leurs méthodes d'accès à la base de données ou vraiment quoi que ce soit. Bien sûr, vous pouvez également utiliser les modules Pear.
Bob Baddeley
2
C'est une bibliothèque oui qui arbore aussi un cadre. Cependant, il cherche quelque chose de facile à utiliser, et la dernière fois que j'ai vérifié, l'espace de noms de Zend est encombré et difficile à taper. @Bob_Baddeley PEAR est une bonne suggestion
WarmWaffles
@WarmWaffles Eh bien à chacun le sien je suppose. Peut-être que vous pourriez revérifier Zend son à 1.10.x maintenant et assez différent alors disons 1.8.
Iznogood
2

Je sais exactement ce que tu ressens. J'ai commencé il y a 4 ~ 5 ans en PHP (je viens de Delphi, lol), et j'ai commencé en php pur. Ce que j'avais en arrière, c'était un "CMS Panel like" qui lisait simplement tous les champs des tables et créait le formulaire. Après un certain temps, j'ai atteint d'une manière ou d'une autre la connaissance de PHP Frameworks, j'ai essayé CakePHP pour la première fois et je n'ai pas aimé, après, je suis entré dans Yii qui, à mon avis, est assez intuitif et facile à utiliser (avec son générateur Gii, ça change beaucoup). J'ai essayé Symfony, ZF2, Laravel, Yii2-Beta et quelques frameworks pour RAD, mais je ne me sentais toujours pas assez vite comme avant les frameworks.

Il est arrivé que j'ai développé mon propre framework (ce n'est naturellement pas exactement que je me suis réveillé un jour et j'ai dit "je vais créer un nouveau framework", c'est arrivé avec le temps). Je sais que c'est une mauvaise mauvaise pratique et un mouvement de "réinvention de roue" MAIS, je développe maintenant mes projets beaucoup plus rapidement (plus que PHP uniquement).

Comme son code est un MESS total, j'ai commencé il y a environ un mois à reformuler mon framework, maintenant il utilise composer, suit les règles communes qui existent entre les frameworks php, est MVC.

Pourquoi je reformule? Parce que si quelqu'un a besoin de réparer un de mes projets, ce ne sera pas une autre chose du monde.

Alors je vous comprends.

Mon conseil est de préparer vos outils (appelez cela un framework, une application prédéfinie ou quel que soit le nom des gens), et utilisez-les comme vous vous sentez mieux, tout en respectant certaines règles courantes (comme MVC, des éléments "faciles à moduler" qui vous pouvez remplacer en cas de rupture.

Ricardo Fiorani
la source
1

Pour la sécurité de base, j'utilise une méthode de filtrage personnalisée qui englobe mes superglobales . Sa syntaxe nécessite un certain temps pour s'y habituer, mais elle est plus simple que l'API PHP filter_var () et ne vous laisse pas glisser la désinfection:

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

Il permettait également l'échappement en ligne de $ _REQUEST-> sql (). Mais pour le travail sur la base de données, continuez à utiliser SQL paramétré ou votre DAL / ORM de choix.

mario
la source
C'est certainement une solution intelligente, mais je ne sais pas pourquoi vous pensez que l'API de filtrage est encombrante. Si quoi que ce soit, je pense que filter_input_array () est excellent. (Principalement parce qu'il est simple de définir toutes les entrées pour un type de demande donné en un seul endroit de manière raisonnablement déclarative. Ne sous-estimez jamais les avantages de ce genre de chose.)
ssokolow
@ssokolow: En effet, filter_input_array () est chouette pour le faire d'un seul coup. Cependant, il y a déjà trop de flexibilité dans les fonctions filter_ *, et trop de paramètres ne lui conviennent pas. C'est pourquoi je pense que les gens l'évitent (même si c'est techniquement une bonne solution).
mario
Peut-être. Je pense qu'une partie du problème est que, en plus d'être une arrivée récente dans un monde où beaucoup de gens ont encore des livres PHP4 sur leurs étagères, ils sont sous-annoncés, les documents officiels ne sont pas assez clairs et les documents de W3Schools qui ont tendance à partager les meilleurs résultats de Google ne sont pas assez complets.
ssokolow
1

J'ai fait une étude d'une journée sur ToroPHP et je l'ai trouvé assez sympa. C'est un cadre minimaliste destiné aux applications RESTful. Cela permet de garder le code côté serveur modulaire, sans avoir à gérer le gonflement de tout framework.

Kinjal Dixit
la source
1

Je ne sais pas ce qui vous dérange mais codeigniter est un excellent framework.Il a une belle documentation et comme beaucoup de gens utilisent codeigniter vous trouverez toute l'aide dans sa documentation, ou forum ou sur stackoverflow.J'ai travaillé sur de nombreux frameworks ( Codeigniter, CakePHP, Zend, Spring 3.0, Ruby on Rails), mais je dois dire que codeigniter a la meilleure documentation.Il y a beaucoup de choses dans codeigiter qui sont automatiquement gérées et vous n'avez pas à vous soucier de la sécurité. Travailler sur le noyau PHP, c'est comme réinventer la roue. Eh bien, la chose la plus importante est que passer d'un noyau à un framework nécessitera beaucoup d'efforts une fois que vous y serez habitué, vous commencerez à l'aimer.Aussi Ruby on rails est aussi un excellent framework une fois que vous connaissez ses tenants et aboutissants, vous pouvez avoir une double vitesse.

Sachin Prasad
la source
2
Cela fait un peu plus de deux ans que j'ai publié ceci et j'ai en fait travaillé avec du PHP pur pendant un certain temps, mais je suis depuis revenu à PHP - vous avez tout à fait raison, il est incroyablement facile à utiliser. Ma configuration préférée actuelle est CI, phpActiveRecord pour les bases de données et Twig pour la création de modèles.
Alex C
Ouais, phpActiveRecord a l'air bien. Avez-vous déjà essayé Laravel? ( laravel.com ) Je pense que vous trouverez qu'il a le meilleur de CI, phpActiveRecord et Twig, tous intégrés par défaut. J'ai moi-même été développeur CakePHP, mais je regarde attentivement Laravel ces derniers temps.
Simon East le