Cadre de travail Symfony


Symfony est un framework PHP gratuit permettant de développer rapidement des applications web et de gérer les tâches courantes des développeurs web. Son développement et son soutien sont sponsorisés par la société française Sensio.Symfony consiste en un ensemble de composants déconnectés qui peuvent être réutilisés dans des projets.

De nombreux grands projets ont été développés avec Symfony :

-Systèmes de gestion de contenu : Magento, Drupal, Opencart
-service de bookmarking social Delicious
-Le site français d'hébergement de vidéos Dailymotion
-moteur de forum phpbb

Par exemple, Symfony a influencé le développement du cadre Laravel à l'aide de ses composants.

Symfony permet d'installer des paquets, des bibliothèques, des composants et des personnalisations de tiers en les configurant dans des fichiers YAML, XML, PHP et .env.

Symfony ne fournit pas de composant de base de données, mais il offre une intégration étroite avec la bibliothèque Doctrine.

Symfony fournit une fonction de programme de messagerie basée sur la populaire bibliothèque Swift Mailer. Ce mailer prend en charge l'envoi de messages depuis vos propres serveurs de messagerie ainsi que depuis des fournisseurs de messagerie populaires tels que Mandrill, SendGrid et Amazon SES.

Un moteur d'internationalisation vous permet de définir et de traduire les messages des applications Web en fonction de la langue ou du pays de votre choix.

Symfony offre un système de journalisation des erreurs d'application ainsi que la possibilité de connecter la bibliothèque de journalisation Monolog.

Les avantages :


1.Puissant écosystème autour du cadre, avec une bonne communauté et de nombreux développeurs.

2.Une documentation de qualité et constamment mise à jour pour toutes les versions du cadre.

3.Beaucoup de composants différents sans rapport entre eux, à réutiliser.

4. Offre un mécanisme de test fonctionnel et unitaire pour trouver les bogues dans les applications web.

5. Convient aux projets web complexes et chargés.


Cons:


Malgré une bonne documentation, le cadre est difficile à apprendre. 

 

Que savons-nous de Symfony ? Mythes et légendes


Merci à notre développeur web Artem Kartasov pour son aperçu des avantages et inconvénients de Symfony !

Lorsqu'on interroge un développeur web sur Symfony, il a généralement une certaine image en tête, une certaine idée fixe. Que peut-on dire de Symfony en une phrase ? Il s'agit d'un framework web complet écrit en PHP. C'est vrai, mais ce n'est pas une définition exacte. L'idée de Symfony est un peu plus large que la définition standard. Symfony est un ensemble de composants autonomes. Les composants s'interconnectent pour former une plateforme web, un écosystème. Le choix des composants dépend toutefois de vous et de vos objectifs. Vous pouvez également utiliser un ensemble minimal pour créer une application ou un prototype simple, ou déployer ce framework Symfony tout-en-un. Dans cet article, nous allons surtout examiner Symfony du point de vue du framework.

Lors de nos entretiens avec des développeurs PHP, nous avons mis en évidence certains points clés communs et nous nous sommes demandé si tout est aussi (bon/mauvais) qu'on le dit.

Mythes et légendes de Symfony

- Faible connectivité des composants


La modularité est l'une des caractéristiques les plus importantes du travail avec Symfony. Comme déjà mentionné, Symfony est une collection de composants réutilisables et autonomes, appelés bundles. Dans Symfony, tout est un bundle et tout vit dans des bundles, aussi bien les composants du noyau du framework que le code de votre application. Cette architecture vous permet de construire votre application de manière très flexible. En construisant votre application brique par brique, votre application n'est plus un mur monolithique et vous ne devez pas démonter toute l'application pour remplacer un module. Et bien sûr, vous pouvez personnaliser la configuration finale. De plus, vous pouvez utiliser des composants Symfony individuels en dehors du cadre. D'autres projets tels que Laravel, Drupal, Magento et bien d'autres ont également adopté cette approche avec succès.

Bien sûr, nous devrions également mentionner le support de l'injection de dépendances dans Symfony comme l'une des principales caractéristiques du cadre. L'utilisation du DI réduit la connectivité et simplifie les tests du code.

- Il existe de nombreuses solutions prêtes à l'emploi dans Symfony.


C'est vrai, il existe des solutions pour de nombreuses tâches différentes, des plus banales aux plus exotiques. Il existe plus de 2500 bundles, chacun d'entre eux pouvant être branché et utilisé, grâce à la modularité. Si, pour une raison quelconque, l'une des liasses ne convient pas, elle peut être remplacée par une liasse similaire, il y a l'embarras du choix. Ou, en corrigeant la faille fatale et en réalisant un rêve cher à un programmeur, vous pouvez écrire le vôtre - le même, mais différent. Il est peut-être formidable de pouvoir réutiliser des composants prêts à l'emploi et des bibliothèques tierces, sans pour autant être lié à une technologie ou un outil particulier.

- Symfony est compliqué

Symfony est trop complexe. C'est en partie vrai parce que Symfony a un seuil de connexion plus élevé que les autres frameworks PHP. Par rapport à d'autres frameworks, Symfony prend un peu plus de temps à maîtriser. Ce ne sera pas facile pour les nouveaux arrivants. Ici et l'utilisation de fonctionnalités innovantes du langage, et l'utilisation de design patterns. Vous devez être prêt à apprendre plus que Symfony. En outre, vous devriez découvrir les technologies et les outils qui vont de pair avec Symfony pour le rendre aussi utile que possible : Twig, SwiftMailer, Monolog, phpUnit, Doctrine, et les bundles les plus populaires tels que FOS, Knp, Gedmo, et autres.

- Symfony est très bien conçu


Symfony se définit par un concept et une idéologie bien définis, mais il est important de comprendre qu'il ne fournit pas une solution "taille unique". La tâche de créer l'architecture finale de l'application (n'oublions pas de respecter les normes) est entièrement déléguée au développeur et laissée à lui-même. Cela a deux implications qui se chevauchent : un développeur Symfony expérimenté est plus susceptible d'avoir une connaissance approfondie du langage en particulier et des compétences de conception en général. Sur une note moins réjouissante, il est plus difficile de trouver un développeur Symfony compétent et il faut du temps pour former le sien.

- Symfony vous garde libre

Vous pensez que vous avez branché le paquet et que vous êtes prêt à partir ? Attendez une seconde, ce n'est pas si simple. Comme le cadre est flexible, il existe de nombreuses possibilités de le personnaliser. Les configurations et les annotations sont tout pour nous. Le framework est déjà livré avec les fichiers de configuration de base. Mais les développeurs de Symfony ne se limitent pas aux fichiers yaml. Vous pouvez utiliser des annotations, des configurations et des fichiers xml ou php pour configurer votre application ou des parties de celle-ci. Il n'y a pas de style unifié, et chacun utilise le moyen le plus pratique. Bien sûr, pour de nombreux points, il existe des recommandations sur ce qu'il faut utiliser dans telle ou telle situation, mais cela n'impose pas de restrictions supplémentaires aux développeurs, ils sont libres de faire leur propre choix.

Qu'est-ce que c'est - la liberté ou le chaos ? Cette situation peut être retournée dans les deux sens. C'est assez simple. En donnant le choix aux gens, vous leur donnez des responsabilités. Il est évident que si elle est utilisée sans précaution, l'application se transformera facilement en une courtepointe en patchwork, et la qualité du produit ne sera pas élevée. La bonne solution consiste à convenir au sein de l'équipe d'une approche de la configuration de l'application et de la description du code avant même le début de la phase active de développement. La communication est la clé du succès.

- Symfony ne convient qu'aux grands projets

Question compliquée. Symfony, si nous parlons d'un framework complet, est bon pour les projets relativement importants. Je serais probablement d'accord pour dire que Symfony n'est pas toujours le meilleur choix pour les petits projets, à quelques exceptions près. Tout d'abord, il peut être utilisé lorsqu'un projet relativement générique doit être résolu, et que les gains d'un démarrage rapide et de bundles standard sont considérables. Toutefois, dans ce cas, ce choix doit être fait consciemment, en pesant les avantages ainsi que les problèmes que l'on pourrait rencontrer. Utiliser Symfony pour une petite API (vous pouvez vous tourner vers des micro-frames tels que Silex) ou un simple site web, c'est comme aller faire ses courses dans un camion long courrier - oui, ça marche, mais c'est plus lent et plus cher qu'une camionnette. La deuxième exception est l'utilisation de Symfony comme outil de croissance pour étendre votre projet et le rendre évolutif. Dans tous les cas, vous devez choisir un outil en fonction de vos objectifs, et non l'inverse.

- Symfony est lent


Je ne qualifierais pas Symfony de lent. Pour les besoins de cet article, nous ne mesurerons pas les performances, nous n'avons pas une telle tâche, mais je crois qu'il est facile de trouver les benchmarks du framework php. Les résultats sont très convaincants, même si Symfony n'est pas le framework préféré, il en existe d'autres plus rapides. Il est important de comprendre pourquoi il en est ainsi. Tous les avantages que nous obtenons en travaillant avec Symfony nécessitent des ressources, et l'abstraction n'est pas gratuite. Tout se paie, et en programmation, nous devons souvent payer la convivialité, la qualité et la rapidité des performances.

Cela soulève immédiatement une question litigieuse : qu'est-ce qui est le plus cher - le coût du développement ou les coûts d'hébergement ? À mon avis, il est plus facile d'ajouter un serveur, augmentant ainsi les performances de l'application, que de trouver et d'ajouter un nouveau développeur au projet. Bien sûr, cela ne signifie absolument pas que vous ne devez pas penser à l'optimisation du produit et à la performance finale. Vous devez et il est très important de toujours tenir compte de cet aspect. Je ne vous cacherai pas que l'optimisation des performances n'est pas une tâche facile. Vous devez comprendre ce qui se passe en interne et comprendre en détail ce qui pourrait causer le ralentissement et comment gérer la charge.

- Trop de magie

J'entends souvent dire qu'il y a trop de magie dans Symfony et que l'on ne sait pas toujours d'où viennent les choses et, surtout, comment elles fonctionnent. Je ne peux pas vraiment être d'accord avec ça. Il n'y a pas plus de magie dans Symfony que dans n'importe quel autre framework. L'utilisation de tout cadre implique un certain niveau de "magie". C'est normal. L'un des objectifs d'un framework est de simplifier les tâches répétitives. Lorsque vous commencez à travailler avec un framework, vous utilisez des exemples de documentation, des recettes toutes faites. En même temps, certaines choses peuvent ne pas être aussi évidentes, être incompréhensibles, nous appelons souvent cela de la magie. Vous utilisez la magie du cadre, et tout semble aller bien. À un certain point, vous ressentez le manque de fonctionnalités et de recettes standard du framework, il est temps de créer votre "magie". En créant votre magie, vous comprenez comment le cadre fonctionne réellement, et à ce moment précis, cette partie cesse d'être une boîte noire pour vous, et cette fonctionnalité cesse d'être magique pour vous. C'est ainsi que la maîtrise du cadre se fait. Vous n'avez pas à craindre de ne pas comprendre tous les détails tout de suite.

- Une communauté puissante


Cet argument peut être entendu en parlant de presque tous les frameworks ou langages de programmation plus ou moins populaires. Tout le monde est convaincu que la communauté est massive, extrêmement amicale, réactive et prête à faire du bien à chaque nouveau venu. Aussi cliché que cela puisse paraître, la communauté Symfony est en fait à grande échelle. Il y a beaucoup de développeurs sur github et stackoverflow qui répondent aux questions (cela inclut les développeurs du noyau et du shell). De plus, la communication n'est pas à sens unique ; tout le monde peut créer des demandes de tirage, faire des suggestions, créer ses propres paquets. Les amateurs de communication en direct doivent savoir que la communauté organise régulièrement des conférences internationales et nationales.

- Soutien et financement

Un autre point important pour un projet open-source qui n'est pas toujours mis en avant est le soutien d'une société commerciale, dans ce cas SensioLabs. L'entreprise propose des services complémentaires tels que le conseil, la formation, les différentes certifications. Cela donne une confiance supplémentaire en termes de stabilité du projet, de croissance et de développement de l'écosystème du cadre.

- Bonne documentation


Il faut noter le haut niveau de la documentation, elle est pertinente pour chaque version du framework, elle décrit non seulement les composants, mais aussi les bundles les plus populaires. Jusqu'à récemment, le site officiel contenait un livre sur l'utilisation pratique de Symfony, une liste de recettes et de bonnes pratiques pour utiliser le framework. À l'occasion du cinquième anniversaire de la deuxième version du framework, ses créateurs ont décidé de remanier en profondeur la documentation, en créant deux sections : Getting started - un petit livre sur les bases du framework et Guides - des guides sur plusieurs sujets. Malheureusement, tous les documents susmentionnés ne sont pas disponibles en russe, et ce fait peut être mentionné comme un obstacle supplémentaire pour les débutants. N'ayez pas peur, cependant - la documentation est bien structurée, écrite dans un langage clair et simple, avec des exemples de code et est facile à comprendre.

Symfony ne limite pas vos choix, il vous donne de la flexibilité mais exige en même temps une compréhension approfondie de son fonctionnement et responsabilise la structure de votre application.

Toute l'essence des annotations Symfony est contenue dans un seul contrôleur :

/**
 * @Route("/{id}/", requirements={"id":"\d+"})
 * @Method("GET")
 * @Rest\View(statusCode=200, serializerEnableMaxDepthChecks=true, serializerGroups={"details"})
 * @ParamConverter("user", class="AppBundle:User")
 * @ApiDoc(
 *   description="Fetch info of a user",
 *   requirements={
 *      {
 *          "name"="id",
 *          "dataType"="integer",
 *          "requirement"="\d+",
 *          "description"="User id"
 *      }
 *   },
 *   resource=true,
 *   section="User"
 * )
 */
public function getUserAction(User $user)
{
	return $user;
}

 

Pour le compte de Webmasters Europe e.V., Marco et moi avons développé le concept détaillé du curriculum du module de développement Web de niveau 2, qui couvre des sujets avancés comme la programmation orientée objet, AJAX et aussi les frameworks.

Dans ce billet de blog, je fais le point sur ce travail de développement et j'explique nos choix.

Qu'est-ce qu'un framework PHP ? Au moins certains d'entre vous n'auront probablement jamais entendu ce terme auparavant. Un framework est une sorte de complément au langage de programmation sous-jacent et fournit de nombreuses fonctionnalités supplémentaires que nous devrions autrement écrire à la main dans chaque projet.

Toute personne qui a déjà copié des fonctions d'un ancien projet afin de les rendre disponibles dans un nouveau projet a déjà créé son propre petit framework. En langage courant, on pourrait donc décrire un cadre de travail comme "les choses dont vous avez besoin à chaque fois".

Dans Codeyourweb, nous utiliserons un framework à la fois pour PHP et JavaScript pour vous aider dans votre programmation. En ce qui concerne le JavaScript, le choix du framework à utiliser a été très facile. jQuery a largement dépassé tous ses concurrents et est désormais pratiquement sans concurrence dans son domaine d'application. Pour les domaines d'application spéciaux, il existe d'autres frameworks, par exemple ExtJS pour le développement d'interfaces complexes, mais dans le domaine des frameworks à usage général, jQuery est actuellement inattaquable au sommet.

Avec PHP, les choses sont un peu différentes. Il existe à peu près autant de frameworks que de développeurs. D'accord, la comparaison est un peu exagérée, mais il y a vraiment beaucoup de frameworks pour PHP. Vous trouverez un aperçu approximatif sur le site http://www.phpframeworks.com/, mais même de mémoire, je pense à plusieurs produits (Alloy, Qcodo, Kohana, Silex, Limonade ...) qui ne figurent pas sur cette liste. Il n'a donc pas été facile de choisir un candidat approprié pour notre cours.

Après quelques recherches et de nombreuses (nombreuses) discussions, nous avons décidé d'opter pour Symfony 2. Dans la suite du billet, je vais expliquer les raisons de notre décision.

Distribution

Il doit s'agir d'un framework dont la part de marché est élevée. Il existe un grand nombre de frameworks très innovants et très intéressants dans l'espace PHP - utilisés par une douzaine de programmeurs. Par exemple, nous avons regardé à quelle fréquence (ou s'il y en avait une) les noms des frameworks apparaissaient dans les offres d'emploi (Webmasters Europe avait fait une analyse du marché du travail pour cela), s'il y avait des livres imprimés ou quelle était l'étendue de la communauté.

Selon ce critère, nous avions réduit la liste des candidats à 

  • Zend Framework
  • Symfony
  • CakePHP
  • CodeIgniter
  • Yii

 

Modernité

PHP 5 est sorti en 2004, la poursuite du développement de PHP 4, y compris la correction des failles de sécurité, a été interrompue en 2008. Utiliser PHP 4 aujourd'hui n'est pas une bonne idée - c'est un euphémisme :

Vous passez à côté des avancées et des nouvelles fonctionnalités qui ont fait leur chemin dans le langage depuis PHP 5. En gros, vous programmez comme vous le faisiez il y a 7 ans, ce qui est long dans le domaine des technologies web.

PHP 4 est mort, officiellement enterré par ses inventeurs ! Ils découragent quiconque d'utiliser ces anciennes versions de PHP, sous quelque forme que ce soit.

Pour ces raisons, nous avons exclu tous les frameworks qui supportent encore PHP 4. Ainsi s'envolèrent

  • CakePHP
  • CodeIgniter

s'est envolé de notre liste. Nous voulons enseigner le développement web moderne, pas le commerce des antiquités !

 

Documentation

La quantité et la qualité de la documentation disponible est également un critère important. Tous les autres candidats disposent d'une documentation suffisante en ligne, Yii arrivant en dernière position. Symfony, avec 4 livres disponibles gratuitement (en PDF) et de nombreuses autres sources, occupe de loin la première place.

 

Comment cela fonctionne 

Enfin, nous avons examiné les frameworks et créé de petits exemples d'applications, en nous inspirant des tutoriels de démarrage disponibles sur leurs sites Web respectifs. Nous avons donc parcouru les étapes de l'installation du framework, de la configuration, de la mise en place du projet, de la connexion à la base de données, de la création de modèles au développement d'une interface CRUD simple.

Au cours de ce processus, nous avons remarqué que le Zend Framework, en particulier, avait un impact très négatif. Un cadre de travail doit aider le développeur et le soulager de son travail. Au lieu de cela, nous nous sommes retrouvés à mettre en place nous-mêmes un ORM basé sur Zend, à développer notre propre concept de migration avec un SQL écrit par nous-mêmes pour la base de données et à écrire beaucoup de configurations.

Nous n'avons pas eu cet effet avec les autres cadres. La mise en route de la première application exécutable a été beaucoup plus rapide et fluide. La raison en est la structure du Zend Framework. Il est conçu plus comme une collection de composants PHP que comme un framework unifié. Ainsi, s'il offre une flexibilité maximale en matière de développement, il demande également plus d'efforts et est moins pratique que ses concurrents.

Une bonne comparaison peut être trouvée dans le sujet "Création de modèles et de bases de données". Si vous voulez, comparez la longueur (et la quantité de code à écrire) dans les deux tutoriels pour débutants de Zend et Symfony et jugez par vous-même :) 

 

 

Résumé

Après avoir recueilli tous les critères et essayé tous les frameworks, Symfony 2 a été notre premier choix. Avec Zend, c'est le plus utilisé, il dispose d'une excellente documentation, il est très moderne (depuis PHP 5.3) et il est facile à utiliser. Nous ne voulions plus enseigner la version 1 stable actuelle, puisque la version 2 deviendra stable bientôt de toute façon. En d'autres termes, lorsque nous aurons terminé tout le matériel de formation, la version 1 sera de toute façon obsolète ;-) 

Donc, c'est tout de mon côté. J'espère avoir pu vous expliquer de manière concluante pourquoi nous enseignerons Symfony à partir de maintenant et j'attends avec impatience vos commentaires. Avez-vous eu d'autres expériences avec des frameworks PHP, quel est votre préféré ?

Peut-être que je te verrai dans le cours de développeur Web de niveau 2 ?

Comparaison de différrents frameworks PHP