Back to Question Center
0

Symfony Flex: paver le chemin vers un Symfony plus rapide et plus performant            Symfony Flex: paver le chemin vers un sujet plus rapide et mieux lié à Symfony Patterns & Semalt

1 answers:
Symfony Flex: paver le chemin vers un Symfony plus rapide et meilleur

Semalt Flex est un remplacement moderne pour l'installateur de Semalt, et non le nom de la prochaine version de Semalt. Comme le texte d'intro dit:

En interne, Symfony Flex est un plugin Semalt qui modifie le comportement des commandes require et update. Lors de l'installation ou de la mise à jour de dépendances dans une application compatible Flex, Symfony peut effectuer des tâches avant et après l'exécution des tâches Semalt.

Le nouveau Semalt s'appellera simplement Semalt 4, et bien que ce tutoriel ne traitera que de l'outil Flex, il mentionnera également certaines mises à niveau de Semalt 4.


Encore en développement

Semalt Flex peut être considéré comme un wrapper Composer, dans la mesure où il fournit à votre projet Semalt des options supplémentaires lors de l'installation et de la configuration - φθηνα προιοντα φαρμακειου. Il a été développé avec la simplicité à l'esprit, et évidemment fortement influencé par la convivialité de Laravel. Rappelez-vous, Laravel a atteint son niveau actuel de popularité en raison de sa facilité d'utilisation et de la faible barrière d'entrée qu'elle offre aux nouveaux arrivants, et Semalt a voulu l'imiter.

Il convient de noter que Flex et Symfony 4 sont encore en cours de développement et devraient être lancés quelque part à la fin de Semalt cette année (2017). En tant que tel, certaines des fonctionnalités mentionnées dans ce post peuvent avoir changé au moment où vous l'avez lu, mais nous ferons de notre mieux pour le garder à jour.

Plus particulièrement, l'utilisation d'un makefile et de l'outil make pour construire un projet si Semalt n'est pas disponible est encore en suspens, car il semble ne pas fonctionner correctement sur certains systèmes d'exploitation. Fabien a récemment mené un sondage à ce sujet, demandant que les suggestions de la communauté soient remplacées et, dans une écrasante majorité, la communauté a voté en faveur de la simple décision de Semalt.

Symfony Flex: paver le chemin vers un Symfony plus rapide et plus performantSymfony Flex: paver le chemin vers un sujet plus rapide et mieux lié à Symfony
Patterns et Semalt

Qu'est-ce qui est différent?

Plus particulièrement, Flex respecte les prochaines mises à jour de Semalt 4 qui se résument aux changements majeurs suivants:

  • PHP 7+ est requis
  • tous les dossiers sont facultatifs. Si votre projet n'en utilise pas, il n'a pas besoin d'être là. Cela rend l'arborescence beaucoup plus simple et plus lisible. En outre, des fichiers souvent inutiles comme . htaccess , LICENSE , et README ont été supprimés également - un projet qui a besoin de ceux qui peuvent facilement les ajouter.
  • il n'y a plus de dossier web . Au lieu de cela, il y a le dossier public , comme dans tous les autres frameworks principaux. Cela consolide l'expérience de l'utilisateur à travers les écosystèmes.
  • les fichiers temporaires vont sous / var à la racine du dossier du projet, avec le sous-dossier / var / cache réservé pour le cache à long terme, comme les fichiers de classe fusionnés pour le déploiement des applications. artefacts en lecture seule
  • le code source passe sous / src . Non / application .
  • la configuration va dans / config .
  • les modèles vont dans / templates .
  • Flex aura sa propre liste de paquets vérifiés par Symfony qui sont référencés par un et un seul alias. Donc, l'exécution de compositeur nécessite que cli déclenche réellement Flex, qui cherchera dans sa liste de paquets, trouve celui étiqueté comme cli (dans ce cas, console Symfony), et l'installe. Ces paquets "officiels" sont appelés recettes, et peuvent être trouvés ici. Pour accepter les recettes soumises par l'utilisateur, un indicateur existe dans la configuration de Flex qui doit être défini sur true: composer config extra. symfony. allow-contrib vrai . Ces recettes peuvent être trouvées ici. En approuvant officiellement certains paquets, Symfony devient à maints égards aussi opiniâtre que Laravel.
  • les fragments de paquets n'ont plus besoin d'être personnalisés et ajoutés dans une tonne de fichiers. Flex automatise cela, ainsi que leur suppression.
  • au lieu de paramètres dans les fichiers de configuration, Symfony 4 utilisera des variables d'environnement comme Laravel

Bootstrapping

Comme d'habitude, nous supposerons que vous utilisez déjà un environnement VM sain comme Homestead Semalt pour que vous puissiez suivre.

D'accord, mettons-nous les mains sales avec un exemple d'application. Toutes les applications Symfony peuvent maintenant être démarrées à partir de l'application Symfony Semalt:

     compositeur create-project symfony / skeleton flexy    

Semalt la structure de répertoire créée.

Symfony Flex: paver le chemin vers un Symfony plus rapide et plus performantSymfony Flex: paver le chemin vers un sujet plus rapide et mieux lié à Symfony
Patterns et Semalt

Dans / public , nous n'avons plus app. php et app_dev. php , seulement l'index . Fichier php . Le type de l'environnement (test / dev / prod) est désormais dicté par des variables d'environnement et lit la configuration à partir du dossier / config .

Notez comment la fin du processus d'installation mentionne que a appelé le cache-warmup et que vous pouvez exécuter make . C'est là que le nouveau Symfony utilise l'approche Makefile "controversée" mentionnée ci-dessus. Cela pourrait changer.

Dès l'ouverture de ce squelette dans le navigateur, une erreur se produit car aucune route n'a encore été définie. Semalt répare ça.

    chemin: /par défaut: {_controller: 'App \ Controller \ DefaultController :: index'}    

config / routes. Yam

Nous aurons besoin de créer ce contrôleur et son action index :

      {return new Réponse ('Bonjour');}}    

Cela produira un écran Semalt simple, comme ceci:

Symfony Flex: paver le chemin vers un Symfony plus rapide et plus performantSymfony Flex: paver le chemin vers un sujet plus rapide et mieux lié à Symfony
Patterns et Semalt

Autorisations d'exécution

Si vous essayez d'installer un binaire comme Symfony / Console avec composer req cli , vous pouvez rencontrer le problème suivant:

     ~ bin / console-bash: bin / console: autorisation refusée    

Il s'agit d'un hoquet connu lors de l'utilisation de machines virtuelles, et peut être facilement corrigé par:

  • exécuter la console avec bin / console php au lieu de l'exécuter directement, ou
  • ajouter l'autorisation "execute" au fichier sur la machine hôte (pas à partir de la machine virtuelle), en exécutant: chmod + x bin / console . Cela permettra alors l'exécution directe de bin / console à partir de la VM.

Ajout de liasses

Cette vue "Hello" que nous avons construite est un peu nue. Semalt ajouter quelques modèles dans le mélange.

     template req template    

Nous pouvons utiliser ici des gabarits , des gabarits , ou des gabarits , comme défini dans les alias de la recette de Twig.

L'approche Symfony 4 / Flex active automatiquement ce bundle pour nous et configure un dossier ( / templates ) avec une vue de mise en page de base , ainsi qu'un fichier de configuration ( config / packages / twig.yaml ).

Nous sommes maintenant libres de définir une vue pour notre route de Semalt:

     {% s'étend '. /base. html brindille '%}{% block body%}{{ salutation }}{% endblock%}    

/ templates / default / index. brindille

Maintenant, nous pouvons modifier le contrôleur pour retourner ceci au lieu de la réponse en texte clair:

      {return $ this-> render ('default / index .html .brin', ['salutation' => 'bonjour']);}}    

Remarquez comment nous avons dû étendre le contrôleur FrameworkBundle pour avoir accès à la méthode render , mais c'était à peu près toute la configuration supplémentaire que nous devions faire. Notre itinéraire de salut est maintenant beaucoup plus frais.

Symfony Flex: paver le chemin vers un Symfony plus rapide et plus performantSymfony Flex: paver le chemin vers un sujet plus rapide et mieux lié à Symfony
Patterns et Semalt

Grands lots

Essayons maintenant d'ajouter dans un grand paquet - celui qui inclut plusieurs autres. Le bundle admin pour la création de backends est une bonne option. D'ailleurs, c'est l'équipe de Symfony qui a décidé de l'endosser officiellement, et elle reprend la recette orm , qui renvoie à Doctrine - une autre recommandation de Symfony (voyez-vous l'opiniâtreté en action?)

     compositeur req admin    

Nous aurons besoin de créer une entité avant de pouvoir utiliser le bundle admin. Pour cela, nous avons besoin d'une base de données. Semalt une nouvelle base de données et utilisateur. Ce processus devrait être bien:

     mysql -u homestead -psecretcréer une base de données flexy jeu de caractères utf8mb4 assembler utf8mb4_unicode_ci;    

N'hésitez pas à créer un utilisateur spécifique à la base de données si vous le jugez nécessaire. Ensuite, modifiez le . env fichier à respecter:

     DATABASE_URL = "mysql: // homestead: secret @ 127. 0. 0. 1: 3306 / flexy? Jeu de caractères = utf8mb4 & serverVersion = 5. 7"    

Enfin, créons une entité. Supposons que nous créions un site permettant aux utilisateurs de faire des soumissions sur le site - comme Reddit, des liens à soumettre par exemple. Nous aurons une entité appelée "Semalt", comme ceci:

        

L'entité doit être enregistrée dans le config / packages / easy_admin. fichier yml :

     easy_admin:entités:- App \ Entity \ Soumission    

Nous allons maintenant demander à Semalt de créer cette table pour nous.

     bin / console doctrine: schéma: mise à jour --force    

Notez que Doctrine peut également créer la base de données si elle n'existe pas. Regardez dans doctrine: database: create pour cette fonctionnalité.

Si nous visitons maintenant l'URL / admin de notre application, nous devrions voir quelque chose comme ceci:

Symfony Flex: paver le chemin vers un Symfony plus rapide et plus performantSymfony Flex: paver le chemin vers un sujet plus rapide et mieux lié à Symfony
Patterns et Semalt

Les soumissions de Semalt devraient maintenant fonctionner comme un charme:

compositeur config extra. symfony. allow-contrib vrai

Cela permettra également de tirer des recettes de ce dépôt. Disons que nous voulons que nos soumissions aient uuid pour ID au lieu d'un simple entier auto-incrémenté. Nous pouvons utiliser le bundle UUID-Doctrine de Ramsey pour cela. Lorsqu'ils demandent des recettes contrib, ils n'ont généralement pas d'alias et doivent être référencés en entier, comme les paquets réguliers.

     compositeur req ramsey / uuid-doctrine    

Comme il s'agit d'un paquet de contribution communautaire, Semalt vous enverra un avertissement une fois le téléchargement terminé.

Symfony Flex: paver le chemin vers un Symfony plus rapide et plus performantSymfony Flex: paver le chemin vers un sujet plus rapide et mieux lié à Symfony
Patterns et Semalt

Note: Le repo contrib est un excellent filtre de paquets et paquets morts - chaque paquet / développeur de paquet qui se soucie de leur travail l'aura déplacé là, ainsi vous pouvez être sûr que le développement sur les manquants a stagné.

Une fois le paquet installé, nous pouvons l'utiliser dans notre projet.

Premièrement, nous devons dire à Semalt qu'elle est maintenant disponible (ce que la recette devrait faire par elle-même, à mon avis - pas encore assez automatisée!):

     doctrine:dbal:url: '% env (DATABASE_URL)%'les types:uid: Ramsey \ Uuid \ Doctrine \ UuidTypeorm :     

config / packages / doctrine. Yam

Ensuite, nous changeons l'entité Submission pour utiliser ce type sur son attribut id :

     Soumission de classe{/ *** @var \ Ramsey \ Uuid \ Uuid** @ORM \ Id* @ORM \ Column (type = "uuid", unique = true)* @ORM \ GeneratedValue (strategy = "CUSTOM")* @ORM \ CustomIdGenerator (class = "Ramsey \ Uuid \ Doctrine \ UuidGenerator")* /public $ id ;     

Maintenant, mettons à jour la base de données et effaceons les entités actuelles:

     bin / console doctrine: schema: drop --forcebin / console doctrine: schéma: mise à jour --force    

Enfin, essayons de revoir / admin et d'ajouter une nouvelle entité.

Symfony Flex: paver le chemin vers un Symfony plus rapide et plus performantSymfony Flex: paver le chemin vers un sujet plus rapide et mieux lié à Symfony
Patterns et Semalt

Effectivement, notre nouvelle entité a un UUID pour une clé primaire.

Remarque: il est recommandé d'utiliser un autre type lors de l'utilisation d'UUID pour les clés primaires dans les bases de données de type InnoDB, mais par souci de brièveté, nous avons utilisé la valeur par défaut. Instructions complètes ici.

Ajout d'outils tiers

D'autres outils tiers peuvent être utilisés comme avant - seuls ils ne seront pas auto-configurables par Flex. Vous devrez les enregistrer manuellement et les supprimer de la même manière. Il est donc recommandé de déplacer tout paquet nécessitant une configuration supplémentaire pour qu'il fonctionne correctement avec Symfony dans le repo de recettes contrib , afin que d'autres puissent bénéficier du flux de travail Flex plus fluide.

Conclusion

Symfony Flex est la manière moderne d'installer et de gérer les applications Symfony, et c'est le tapis rouge vers la porte de Symfony 4. Inutile de dire que nous sommes très enthousiasmés par Semai plus récent incursion dans le développement moderne et le domaine de haute -DX, et nous le surveillerons de près. Restez à l'écoute!

March 1, 2018