<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Integral Service]]></title><description><![CDATA[Studio Web Lyonnais pour vos applications sur-mesure]]></description><link>https://www.integral-service.fr</link><image><url>https://www.integral-service.fr/logos/logo-512.png</url><title>Integral Service</title><link>https://www.integral-service.fr</link></image><generator>GatsbyJS Material Starter</generator><lastBuildDate>Mon, 12 Sep 2022 13:29:28 GMT</lastBuildDate><atom:link href="https://www.integral-service.fr/rss.xml" rel="self" type="application/rss+xml"/><author><![CDATA[Integral Service]]></author><copyright><![CDATA[Copyright © 2017. Integral Service]]></copyright><item><title><![CDATA[Sylius, comment mettre en place un mode catalogue]]></title><description><![CDATA[Sylius  est un  framework PHP basé sur Symfony  qui offre des fonctionnalités  E-Commerce . En plein essor depuis plus de 5 ans maintenant…]]></description><link>https://www.integral-service.fr/sylius-comment-mettre-en-place-un-mode-catalogue</link><guid isPermaLink="false">https://www.integral-service.fr/sylius-comment-mettre-en-place-un-mode-catalogue</guid><category><![CDATA[Symfony]]></category><category><![CDATA[Sylius]]></category><category><![CDATA[Web]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Sylius&lt;/strong&gt; est un &lt;strong&gt;framework PHP basé sur Symfony&lt;/strong&gt; qui offre des fonctionnalités &lt;strong&gt;E-Commerce&lt;/strong&gt;. En plein essor depuis plus de 5 ans maintenant, la technologie grandit et sa communauté avec !&lt;/p&gt;
&lt;p&gt;Sylius se démarque notamment de ses principaux concurrents (Magento, Prestashop…) par sa grande adaptabilité aux besoins métiers spécifiques. A contrario, une plus grande souplesse implique une montée en compétence plus ardue et des connaissances solides.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Integral Service développe des sites E-Commerce avec Sylius&lt;/strong&gt; depuis maintenant 5 ans. Nous avons vu grandir la technologie, depuis l’alpha jusqu&apos;à aujourd&apos;hui. A notre actif, on retrouve des plateformes &lt;strong&gt;E-Commerce automatisées avec différents ERP&lt;/strong&gt; (Gestimum, Wavesoft, Business Central, Sage X3, Divalto, ...) mais aussi des rendus 3D, ou des configurateurs de produits !&lt;/p&gt;
&lt;p&gt;Dans cet article, nous souhaitons vous proposer une méthode exhaustive afin de développer un mode Catalogue complètement dynamique dans votre projet Sylius. Le mode catalogue désigne le fait d’avoir la fonctionnalité de consultation des produits, sans les fonctions de tunnel de commande et d’achat.&lt;/p&gt;
&lt;p&gt;Nous commencerons par la préparation de l’activation du mode catalogue dans l’interface d’administration. Ensuite nous expliquerons comment restreindre l’accès au tunnel de commande. Et enfin nous terminerons par l’affichage conditionnel des différentes informations liées à l’achat en ligne.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ce guide de développement requiert un minimum de connaissances du
framework Symfony ainsi que de Sylius. Le code présenté dans ce guide
est tiré d’un projet exemple basé sur Sylius v1.11.7 et Symfony
v5.4.12.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;ajout-du-mode-catalogue-à-linterface-dadministration-des-données&quot;&gt;&lt;a href=&quot;#ajout-du-mode-catalogue-%C3%A0-linterface-dadministration-des-donn%C3%A9es&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Ajout du mode catalogue à l’interface d’administration des données&lt;/h2&gt;
&lt;p&gt;La première chose à déterminer est l’endroit ou l’on veut faire apparaître l’option “Mode Catalogue” dans notre interface d’administration.&lt;/p&gt;
&lt;p&gt;Sylius introduit le concept de canaux (Channel), qui permet de gérer plusieurs boutiques avec une seule interface d’administration, c’est justement ici que l’on va venir se brancher ! Ainsi vous pourrez activer ou désactiver le mode catalogue pour chaque canal de votre application.&lt;/p&gt;
&lt;p&gt;Pour ajouter un nouveau paramètre à nos canaux, il nous faut ajouter un champ dans l’entité Channel de Sylius.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pour plus de détails sur la customisation des modèles :
&lt;a href=&quot;https://docs.sylius.com/en/1.12/customization/model.html&quot;&gt;https://docs.sylius.com/en/1.12/customization/model.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;ajouter-catalogmode-dans-lentité-channel&quot;&gt;&lt;a href=&quot;#ajouter-catalogmode-dans-lentit%C3%A9-channel&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Ajouter catalogMode dans l’entité Channel&lt;/h3&gt;
&lt;p&gt;D’abord, on vient ajouter l’attribut booléen catalogMode dans l’entité Channel.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-php&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;//src/Entity/Channel/Channel.php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;Channel&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;BaseChannel&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;/**
	* @ORM\Column(name=&quot;catalog_mode&quot;, type=&quot;boolean&quot;, nullable=false, options={&quot;default&quot; : false})
	*/&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt;  bool  &lt;span class=&quot;token variable&quot;&gt;$catalogMode&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token comment&quot;&gt;/**
	* @return bool
	*/&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getCatalogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; bool
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;catalogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token comment&quot;&gt;/**
	* @param bool $catalogMode
	* @return Channel
	*/&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;setCatalogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bool  &lt;span class=&quot;token variable&quot;&gt;$catalogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Channel
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;catalogMode&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$catalogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;br&gt;
Ensuite on génère la migration associée.
&lt;code&gt;$ php bin/console doctrine:migration:diff&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Puis on l’exécute.
&lt;code&gt;$ php bin/console doctrine:migration:migrate&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-php&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;//src/Migrations/VersionXXXXXXXXX.php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;final&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;Version20220802073139&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;AbstractMigration&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getDescription&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; string
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;  &lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;	

	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;up&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Schema  &lt;span class=&quot;token variable&quot;&gt;$schema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; void
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;	
		&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addSql&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;ALTER TABLE sylius_channel ADD catalog_mode TINYINT(1) DEFAULT \&apos;0\&apos; NOT NULL&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;	
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;down&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Schema  &lt;span class=&quot;token variable&quot;&gt;$schema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; void
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addSql&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;ALTER TABLE sylius_channel DROP catalog_mode&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;br&gt;
Ça y est ! On a ajouté notre attribut, maintenant il faut mettre à jour le formulaire des Channel pour pouvoir modifier sa valeur dans l’interface d’administration.&lt;/p&gt;
&lt;h3 id=&quot;ajouter-le-champ-dans-le-formulaire-channel&quot;&gt;&lt;a href=&quot;#ajouter-le-champ-dans-le-formulaire-channel&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Ajouter le champ dans le formulaire Channel&lt;/h3&gt;
&lt;p&gt;Symfony introduit le principe d’extension de formulaire et Sylius le reprend afin de permettre aux développeurs de modifier librement les formulaires du framework !&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pour plus de détails sur la customisation des formulaires :
&lt;a href=&quot;https://docs.sylius.com/en/1.12/customization/form.html&quot;&gt;https://docs.sylius.com/en/1.12/customization/form.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;D’abord il faut créer l’extension de formulaire qui va nous permettre d’afficher notre champ, fraîchement ajouté.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-php&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;//src/Form/Extension/ChannelTypeExtension.php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;final&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;ChannelTypeExtension&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;AbstractTypeExtension&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;buildForm&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;FormBuilderInterface  &lt;span class=&quot;token variable&quot;&gt;$builder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$options&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; void
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token variable&quot;&gt;$builder&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;catalogueMode&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; CheckboxType&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
			&lt;span class=&quot;token string&quot;&gt;&apos;label&apos;&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;channel.form.label.catalog_mode&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token string&quot;&gt;&apos;required&apos;&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;  &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getExtendedTypes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; iterable
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;ChannelType&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;br&gt;
Une fois le fichier créé, il faut le déclarer dans la configuration des services de l’application.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;#config/services.yaml&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;app.form.extension.type.channel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
	&lt;span class=&quot;token key atrule&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; App\Form\Extension\ChannelTypeExtension
	&lt;span class=&quot;token key atrule&quot;&gt;tags&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; form.type_extension&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;extended_type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Sylius\Bundle\ChannelBundle\Form\Type\ChannelType &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;br&gt;
Enfin, il ne reste plus qu&apos;à modifier le template d’affichage du formulaire pour y inclure notre champ custom.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-twig&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;{# templates/bundles/SyliusAdminBundle/Channel/Form/_lookAndFeel.html.twig #}&lt;/span&gt;

&lt;span class=&quot;token other&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;  &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ui hidden divider&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h4&lt;/span&gt;  &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ui top attached large header&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{{&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&apos;&lt;/span&gt;sylius.ui.look_and_feel&lt;span class=&quot;token punctuation&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;trans&lt;/span&gt;  &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token other&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;  &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ui attached segment&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{{&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token property&quot;&gt;form_row&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;themeName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token other&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;  &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ui attached segment&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{{&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token property&quot;&gt;form_row&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;locales&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{{&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token property&quot;&gt;form_row&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;defaultLocale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token other&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;  &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ui attached segment&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{{&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token property&quot;&gt;form_row&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;menuTaxon&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token other&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;  &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ui hidden divider&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;  &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ui attached segment&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{{&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token property&quot;&gt;form_row&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;catalogueMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{{&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token property&quot;&gt;form_row&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;skippingShippingStepAllowed&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{{&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token property&quot;&gt;form_row&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;skippingPaymentStepAllowed&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{{&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token property&quot;&gt;form_row&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;accountVerificationRequired&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token other&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;br&gt;
Et voilà ! nous avons un formulaire avec un champ custom prêt à l’emploi qui nous permet d’activer ou de désactiver le mode catalogue.&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/catalog_form_screen-b7605a8357fe2253f4cb0f480be9b4e3-a60e6.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 597px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 25.628140703517587%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsSAAALEgHS3X78AAAAi0lEQVQY062PUQ4CIQxEuf+RPIVHMPFHY4EiLMgKjJQl+6cxxiZNJ2n6pqNqrSiloLX2l1YCTCkhxgWWGUQ3PHLGrzWAIQQsvdk5aE0wxvSpcfce1tqhuZuJlh2RRn5jqtYe93g5w89jIhoA0a4bmAkU0A7UH4DhueJwPfXYcTuY3wiY2e3fSpJv6gUFTYYyKQk7jwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;catalog form screen&quot;
        title=&quot;&quot;
        src=&quot;/static/catalog_form_screen-b7605a8357fe2253f4cb0f480be9b4e3-a60e6.png&quot;
        srcset=&quot;/static/catalog_form_screen-b7605a8357fe2253f4cb0f480be9b4e3-10102.png 240w,
/static/catalog_form_screen-b7605a8357fe2253f4cb0f480be9b4e3-8d58a.png 480w,
/static/catalog_form_screen-b7605a8357fe2253f4cb0f480be9b4e3-a60e6.png 597w&quot;
        sizes=&quot;(max-width: 597px) 100vw, 597px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;h2 id=&quot;restriction-de-laccès-au-tunnel-de-commande&quot;&gt;&lt;a href=&quot;#restriction-de-lacc%C3%A8s-au-tunnel-de-commande&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Restriction de l’accès au tunnel de commande&lt;/h2&gt;
&lt;p&gt;L’intérêt d’un mode catalogue est de masquer les fonctionnalités d’achat par défaut de Sylius pour ne proposer qu’un catalogue vitrine en ligne. Il nous faut donc restreindre l’accès au tunnel de commande de Sylius ainsi qu’à la page “Panier”. Il faut cependant être vigilant sur l’accès via API des différentes fonctionnalités mentionnées. Pour cela nous proposerons un blocage métier (avec le Processor) ainsi qu’un blocage d’accès aux pages avec un contrôleur agissant comme une sorte de pare-feu.&lt;/p&gt;
&lt;h3 id=&quot;extension-de-lorderprocessor&quot;&gt;&lt;a href=&quot;#extension-de-lorderprocessor&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Extension de l’OrderProcessor&lt;/h3&gt;
&lt;p&gt;Sylius introduit le concept d’OrderProcessor. Il s’agit d’un composant qui est appelé à plusieurs étapes du processus de commande et qui va servir à appliquer la logique de calcul liée aux commandes (les différentes taxes, promotions, sélection des méthodes de livraison…).&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/order_processor-494a03c004e4aa9e70d9bf0c7e9a752b-176ed.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 715px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 134.54545454545453%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAbCAYAAAB836/YAAAACXBIWXMAAAsSAAALEgHS3X78AAAC2klEQVRIx5VVbZubIBC8///77nqXNEajgiCIaHzNl+kuVptcbPvkwzwsC5kwzrK8ibKCVBpSG5yEQS4KFKrERTkkuYQoFIQyyIxHfMkCctvgQvs4Ftoi1TUKXUKXFm/a96iuI0oapR9DbHyHwi852/QwzRDmeekgTB326brDRZaQVQtZD+F3jLeiveE70qrf4swNSMoWqSUCc4Vs5oe92d1exgOhcB1SIXFOLsgNySKSsyD5WY6cpJ9VHXLf8VdCluKuC1gi53RDUtoh5MTv3L+wEeY1/2Da3cSy/0f0RHgQ5CI5W3fTE4y/7ua39abfIZQ93qMCSilorQOEEIiiCHEcb2OapmG01qKu64DS2GdC4WfEukFBJfAqpNs54c9iwOFSUmFLZDm5mgtIWYR/V1T4BUGXBoZOtuZ4rrigTfVMGJUjzkWNcb5taLsein4k6ebkRM63geeaCO/31dedE2Y1SVYepp1ehvLDnikkObXw3gdDVnP4ozvnAnhtNYLjqqpCzEqeCFM3IdEerptfRtnsnDC2E31DFzqLpA4i6Lsp+tjG+QBdUXls8LTmwris+f06PKYGwzAEjOMYMM9zQFmWQR7Ht9sN0zRta7uSuYucSXJq2tdh2/0TfiaLGXwaNsQYE8zgeVEUyLIsGMG5e7NM5Z4JE7uY0g7zE+rrAFO3AXvrVbsj+VItpji67K+CO/u+KZlD13VBHstcpTFWqWstcnNomiaM/TDu9ENqDsecHqqL+P0YpdS509DB+aHK6OoJur+5VBs4z2NGD1ambHi8Hjr2T1nhLC1OSY5jTIQZNQqqS8V1t8Jy3VFXsvU2D6BYkNsPhEdhcUgkDlGMr9OCU0KnJWLFBISCCvr7uMXu+kgYUbd5P8b4+PGJj8+vMH4djpAkjcEtjGVKtcTc6hgcWyod5drHsmGXm356GdXeE3DSEyLpg2trUd93FXaUXb53e6uC5s9N+QU8OPjVvKd+kwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;order processor&quot;
        title=&quot;&quot;
        src=&quot;/static/order_processor-494a03c004e4aa9e70d9bf0c7e9a752b-176ed.png&quot;
        srcset=&quot;/static/order_processor-494a03c004e4aa9e70d9bf0c7e9a752b-a89e6.png 240w,
/static/order_processor-494a03c004e4aa9e70d9bf0c7e9a752b-b1c0d.png 480w,
/static/order_processor-494a03c004e4aa9e70d9bf0c7e9a752b-176ed.png 715w&quot;
        sizes=&quot;(max-width: 715px) 100vw, 715px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Schéma de l’OrderProcessor par défaut de Sylius Source :
&lt;a href=&quot;https://docs.sylius.com/en/1.12/book/orders/orders.html&quot;&gt;https://docs.sylius.com/en/1.12/book/orders/orders.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dans le schéma ci-dessus, on peut voir qu’en réalité l’OrderProcessor est composé de plusieurs Processors, exécutés dans l’ordre décroissant de leur priorité. L’idée pour notre mode catalogue va être de créer un nouveau Processor avec la plus haute priorité afin de vérifier si le canal courant est en mode catalogue ou non. Si oui, alors nous lèverons une exception de type NotFound pour générer une erreur 404.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-php&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;//src/Services/OrderProcessor/OrderCatalogProcessor.php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;final&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;OrderCatalogProcessor&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;implements&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;OrderProcessorInterface&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt;  ChannelContextInterface  &lt;span class=&quot;token variable&quot;&gt;$channelContext&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;__construct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ChannelContextInterface  &lt;span class=&quot;token variable&quot;&gt;$channelContext&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;channelContext&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$channelContext&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;OrderInterface  &lt;span class=&quot;token variable&quot;&gt;$order&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; void
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;channelContext&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getChannel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getCatalogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;NotFoundHttpException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;br&gt;
Ensuite, il suffit de configurer le Processor pour l’activer.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;#config/services.yaml&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;app.service.order_processor.order_catalog_processor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
	&lt;span class=&quot;token key atrule&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; App\Service\OrderProcessor\OrderCatalogProcessor
	&lt;span class=&quot;token key atrule&quot;&gt;tags&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius.order_processor&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;priority&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;70 &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;br&gt;
La surcharge de la logique de l&apos;OrderProcessor est donc terminée.&lt;/p&gt;
&lt;h3 id=&quot;création-dun-contrôleur-pour-vérifier-et-rediriger-les-requêtes-vers-les-pages-interdites&quot;&gt;&lt;a href=&quot;#cr%C3%A9ation-dun-contr%C3%B4leur-pour-v%C3%A9rifier-et-rediriger-les-requ%C3%AAtes-vers-les-pages-interdites&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Création d’un contrôleur pour vérifier et rediriger les requêtes vers les pages interdites&lt;/h3&gt;
&lt;p&gt;Désormais nous avons restreint les logiques métier liées au tunnel de commande de notre application Sylius. Néanmoins, les utilisateurs pourront toujours accéder aux pages panier via une requête HTTP classique (avec l’url de la page par exemple).&lt;/p&gt;
&lt;p&gt;L’idée va être de créer un contrôleur personnalisé qui va vérifier si le canal courant est en mode catalogue ou non, puis laisser passer les requêtes ou renvoyer une erreur.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-php&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;//src/Controller/CatalogController.php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;CatalogController&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;AbstractController&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt;  ChannelContextInterface  &lt;span class=&quot;token variable&quot;&gt;$channelContext&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;__construct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ChannelContextInterface  &lt;span class=&quot;token variable&quot;&gt;$channelContext&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;channelContext&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$channelContext&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;checkCatalogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Request  &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Response
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;channelContext&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getChannel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getCatalogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;NotFoundHttpException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

		&lt;span class=&quot;token variable&quot;&gt;$redirectController&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;_redirect_controller&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$redirectController&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;MissingMandatoryParametersException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;request is missing _redirect_controller parameter&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forward&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$redirectController&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$request&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;br&gt;
Enfin, il nous suffit de surcharger les routes définies par Sylius pour l’accès au tunnel de commande ainsi qu’à la page panier.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;#config/routes/catalog_mode.yaml&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;sylius_shop_cart_summary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
    &lt;span class=&quot;token key atrule&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;_locale&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;/cart  
    &lt;span class=&quot;token key atrule&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;GET&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  
    &lt;span class=&quot;token key atrule&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
        &lt;span class=&quot;token key atrule&quot;&gt;_controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; App\Controller\CatalogController&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;checkCatalogMode  
        &lt;span class=&quot;token key atrule&quot;&gt;_redirect_controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius.controller.order&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;summaryAction  
        &lt;span class=&quot;token key atrule&quot;&gt;_sylius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
            &lt;span class=&quot;token key atrule&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@SyliusShop/Cart/summary.html.twig&quot;&lt;/span&gt;  
  &lt;span class=&quot;token key atrule&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Sylius\Bundle\OrderBundle\Form\Type\CartType  
  
&lt;span class=&quot;token key atrule&quot;&gt;sylius_shop_checkout_address&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
    &lt;span class=&quot;token key atrule&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;_locale&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;/checkout/address  
    &lt;span class=&quot;token key atrule&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;GET&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; PUT&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  
    &lt;span class=&quot;token key atrule&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
        &lt;span class=&quot;token key atrule&quot;&gt;_controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; App\Controller\CatalogController&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;checkCatalogMode  
        &lt;span class=&quot;token key atrule&quot;&gt;_redirect_controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius.controller.order&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;updateAction  
        &lt;span class=&quot;token key atrule&quot;&gt;_sylius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
            &lt;span class=&quot;token key atrule&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; address  
            &lt;span class=&quot;token key atrule&quot;&gt;flash&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;false  &lt;/span&gt;
            &lt;span class=&quot;token key atrule&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@SyliusShop/Checkout/address.html.twig&quot;&lt;/span&gt;  
  &lt;span class=&quot;token key atrule&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Sylius\Bundle\CoreBundle\Form\Type\Checkout\AddressType  
                &lt;span class=&quot;token key atrule&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                    &lt;span class=&quot;token key atrule&quot;&gt;customer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; expr&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;service(&apos;sylius.context.customer&apos;).getCustomer()  
            &lt;span class=&quot;token key atrule&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; findCartForAddressing  
                &lt;span class=&quot;token key atrule&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                    &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;expr:service(&apos;sylius.context.cart&apos;).getCart().getId()&quot;&lt;/span&gt;  
  &lt;span class=&quot;token key atrule&quot;&gt;state_machine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;graph&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius_order_checkout  
                &lt;span class=&quot;token key atrule&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; address  
  
&lt;span class=&quot;token key atrule&quot;&gt;sylius_shop_checkout_select_shipping&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
    &lt;span class=&quot;token key atrule&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;_locale&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;/checkout/select&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;shipping  
    &lt;span class=&quot;token key atrule&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;GET&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; PUT&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  
    &lt;span class=&quot;token key atrule&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
        &lt;span class=&quot;token key atrule&quot;&gt;_controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; App\Controller\CatalogController&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;checkCatalogMode  
        &lt;span class=&quot;token key atrule&quot;&gt;_redirect_controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius.controller.order&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;updateAction  
        &lt;span class=&quot;token key atrule&quot;&gt;_sylius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
            &lt;span class=&quot;token key atrule&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; select_shipping  
            &lt;span class=&quot;token key atrule&quot;&gt;flash&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;false  &lt;/span&gt;
            &lt;span class=&quot;token key atrule&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@SyliusShop/Checkout/selectShipping.html.twig&quot;&lt;/span&gt;  
  &lt;span class=&quot;token key atrule&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Sylius\Bundle\CoreBundle\Form\Type\Checkout\SelectShippingType  
            &lt;span class=&quot;token key atrule&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; findCartForSelectingShipping  
                &lt;span class=&quot;token key atrule&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                    &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;expr:service(&apos;sylius.context.cart&apos;).getCart().getId()&quot;&lt;/span&gt;  
  &lt;span class=&quot;token key atrule&quot;&gt;state_machine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;graph&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius_order_checkout  
                &lt;span class=&quot;token key atrule&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; select_shipping  
  
&lt;span class=&quot;token key atrule&quot;&gt;sylius_shop_checkout_select_payment&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
    &lt;span class=&quot;token key atrule&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;_locale&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;/checkout/select&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;payment  
    &lt;span class=&quot;token key atrule&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;GET&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; PUT&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  
    &lt;span class=&quot;token key atrule&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
        &lt;span class=&quot;token key atrule&quot;&gt;_controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; App\Controller\CatalogController&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;checkCatalogMode  
        &lt;span class=&quot;token key atrule&quot;&gt;_redirect_controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius.controller.order&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;updateAction  
        &lt;span class=&quot;token key atrule&quot;&gt;_sylius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
            &lt;span class=&quot;token key atrule&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; payment  
            &lt;span class=&quot;token key atrule&quot;&gt;flash&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;false  &lt;/span&gt;
            &lt;span class=&quot;token key atrule&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@SyliusShop/Checkout/selectPayment.html.twig&quot;&lt;/span&gt;  
  &lt;span class=&quot;token key atrule&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Sylius\Bundle\CoreBundle\Form\Type\Checkout\SelectPaymentType  
            &lt;span class=&quot;token key atrule&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; findCartForSelectingPayment  
                &lt;span class=&quot;token key atrule&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                    &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;expr:service(&apos;sylius.context.cart&apos;).getCart().getId()&quot;&lt;/span&gt;  
  &lt;span class=&quot;token key atrule&quot;&gt;state_machine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;graph&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius_order_checkout  
                &lt;span class=&quot;token key atrule&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; select_payment  
  
&lt;span class=&quot;token key atrule&quot;&gt;sylius_shop_checkout_complete&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
    &lt;span class=&quot;token key atrule&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;_locale&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;/checkout/complete  
    &lt;span class=&quot;token key atrule&quot;&gt;methods&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;GET&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; PUT&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;  
    &lt;span class=&quot;token key atrule&quot;&gt;defaults&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
        &lt;span class=&quot;token key atrule&quot;&gt;_controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; App\Controller\CatalogController&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;checkCatalogMode  
        &lt;span class=&quot;token key atrule&quot;&gt;_redirect_controller&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius.controller.order&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;updateAction  
        &lt;span class=&quot;token key atrule&quot;&gt;_sylius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
            &lt;span class=&quot;token key atrule&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; complete  
            &lt;span class=&quot;token key atrule&quot;&gt;flash&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;false  &lt;/span&gt;
            &lt;span class=&quot;token key atrule&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@SyliusShop/Checkout/complete.html.twig&quot;&lt;/span&gt;  
  &lt;span class=&quot;token key atrule&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; findCartForSummary  
                &lt;span class=&quot;token key atrule&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                    &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;expr:service(&apos;sylius.context.cart&apos;).getCart().getId()&quot;&lt;/span&gt;  
  &lt;span class=&quot;token key atrule&quot;&gt;state_machine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;graph&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius_order_checkout  
                &lt;span class=&quot;token key atrule&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; complete  
            &lt;span class=&quot;token key atrule&quot;&gt;redirect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;route&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; sylius_shop_order_pay  
                &lt;span class=&quot;token key atrule&quot;&gt;parameters&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                    &lt;span class=&quot;token key atrule&quot;&gt;tokenValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; resource.tokenValue  
            &lt;span class=&quot;token key atrule&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                &lt;span class=&quot;token key atrule&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Sylius\Bundle\CoreBundle\Form\Type\Checkout\CompleteType  
                &lt;span class=&quot;token key atrule&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  
                    &lt;span class=&quot;token key atrule&quot;&gt;validation_groups&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;sylius_checkout_complete&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;#src/routes.yaml&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;sylius_catalog_mode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
	&lt;span class=&quot;token key atrule&quot;&gt;resource&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;./routes/catalog_mode.yml&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;br&gt;
Désormais l’accès aux pages et aux fonctionnalités du processus de commande est totalement restreint. Cependant, dans un projet Sylius, lorsqu’un utilisateur se connecte à son compte, le panier en cours de la session est fusionné avec celui enregistré pour cet utilisateur. Lorsque le mode catalogue est activé, nous ne voulons pas effectuer ce traitement. Il faut alors surcharger l’évènement correspondant afin de conditionner cette fonctionnalité.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-php&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;//src/EventListener/UserCartRecalculationListenerDecorator.php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;UserCartRecalculationListenerDecorator&lt;/span&gt;  
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;  
  &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;__construct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;  
	  &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; CartContextInterface &lt;span class=&quot;token variable&quot;&gt;$cartContext&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;  
	  &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; OrderProcessorInterface &lt;span class=&quot;token variable&quot;&gt;$orderProcessor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;  
	  &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; SectionProviderInterface &lt;span class=&quot;token variable&quot;&gt;$uriBasedSectionContext&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;  
	  &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; ChannelContextInterface &lt;span class=&quot;token variable&quot;&gt;$channelContext&lt;/span&gt;  
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;  
 
  &lt;span class=&quot;token comment&quot;&gt;/**  
  * @param InteractiveLoginEvent|UserEvent $event  
  */&lt;/span&gt;  
  &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;recalculateCartWhileLogin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;object &lt;span class=&quot;token variable&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; void  
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;  
	  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;channelContext&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getChannel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getCatalogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;  
		  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  
	  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;  
	  
	  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;uriBasedSectionContext&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getSection&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ShopSection&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;  
		  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  
	  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;  
	  
	  &lt;span class=&quot;token comment&quot;&gt;/** @psalm-suppress DocblockTypeContradiction */&lt;/span&gt;  
	  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$event&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;InteractiveLoginEvent&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$event&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;UserEvent&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;  
		  &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;TypeError&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sprintf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;  
			  &lt;span class=&quot;token string&quot;&gt;&apos;$event needs to be an instance of &quot;%s&quot; or &quot;%s&quot;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;  
			  InteractiveLoginEvent&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;  
			  UserEvent&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;  
		  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  
	  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;  
	  
	  &lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;  
		  &lt;span class=&quot;token variable&quot;&gt;$cart&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;cartContext&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getCart&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  
	  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;CartNotFoundException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;  
		  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  
	  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;  
	  
	  Assert&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isInstanceOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$cart&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; OrderInterface&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  
	  
	  &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;orderProcessor&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$cart&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;  
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;h2 id=&quot;affichage-conditionnel-des-prix-et-autres-informations-dachat&quot;&gt;&lt;a href=&quot;#affichage-conditionnel-des-prix-et-autres-informations-dachat&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Affichage conditionnel des prix et autres informations d’achat&lt;/h2&gt;
&lt;p&gt;Toutes les fonctionnalités et pages ayant été bloquées, il ne nous reste désormais plus qu’à conditionner l’affichage des boutons d’ajouts au panier et de toute autre information que vous ne souhaitez pas afficher en mode catalogue. L’objet channel est injecté automatiquement par Sylius dans les différentes pages publiques du site (dans le Shop). Il est donc très simple de conditionner un affichage avec Twig.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-twig&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;{# theme/MonTheme/bundles/SyliusShopBundle/Product/Show/_priceWidget.html.twig #}&lt;/span&gt;
&lt;span class=&quot;token other&quot;&gt;…&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{%&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;not&lt;/span&gt;  &lt;span class=&quot;token property&quot;&gt;sylius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;catalogMode&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;not&lt;/span&gt;  &lt;span class=&quot;token property&quot;&gt;product&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;variants&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{%&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;include&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&apos;&lt;/span&gt;@SyliusShop/Product/Show/_price.html.twig&lt;span class=&quot;token punctuation&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token ld&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{%&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;endif&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token rd&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token other&quot;&gt;…&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;br&gt;
Néanmoins, pour l’interface d’administration de Sylius, les différents formulaires liés aux canaux peuvent être optimisés pour obtenir une meilleure UX. Pour cela, nous allons créer une extension twig qui nous permettra de savoir si un canal est en mode catalogue via son code.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-php&quot;&gt;&lt;code&gt;&lt;span class=&quot;token comment&quot;&gt;//src/Twig/CatalogExtension.php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;CatalogExtension&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;AbstractExtension&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt;  ChannelRepositoryInterface  &lt;span class=&quot;token variable&quot;&gt;$channelRepository&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;__construct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;ChannelRepositoryInterface  &lt;span class=&quot;token variable&quot;&gt;$channelRepository&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;channelRepository&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$channelRepository&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getFunctions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;TwigFunction&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;isChannelCatalog&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;isCatalog&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;isCatalog&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$channelCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; bool
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token variable&quot;&gt;$channel&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;channelRepository&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;findOneByCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$channelCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$channel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt;  &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;  &lt;span class=&quot;token class-name&quot;&gt;ChannelNotFoundException&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$channel&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getCatalogMode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;&lt;a href=&quot;#conclusion&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Finalement, le mode catalogue à été ajouté de manière totalement dynamique à notre projet Sylius et nous avons le contrôle total sur les différents rendus d’affichage que nous voulons obtenir.&lt;/p&gt;
&lt;p&gt;L’idéal pour une fonctionnalité de ce type est de la développer dans un plugin Sylius afin de la réutiliser très simplement par la suite, et pourquoi pas la mettre à disposition de la communauté ! Peut-être qu’un article sur la création de plugins Sylius pourrait arriver prochainement…&lt;/p&gt;
&lt;p&gt;N’hésitez pas à nous faire vos retours sur nos différents réseaux sociaux :&lt;/p&gt;
&lt;p&gt;LinkedIn : &lt;a href=&quot;https://fr.linkedin.com/company/integral-service-web&quot;&gt;https://fr.linkedin.com/company/integral-service-web&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Twitter : &lt;a href=&quot;https://twitter.com/IntegralWeb69&quot;&gt;https://twitter.com/IntegralWeb69&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Instagram : &lt;a href=&quot;https://www.instagram.com/integralweb69/&quot;&gt;https://www.instagram.com/integralweb69/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Facebook : &lt;a href=&quot;https://www.facebook.com/integralweb69&quot;&gt;https://www.facebook.com/integralweb69&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Les nouveautés de Symfony 5]]></title><description><![CDATA[Symfony 5  est disponible depuis le 21 Novembre 2019. Il est la suite logique de  Symfony 4  qui a largement été applaudi par la communauté…]]></description><link>https://www.integral-service.fr/les-nouveautes-de-symfony-5</link><guid isPermaLink="false">https://www.integral-service.fr/les-nouveautes-de-symfony-5</guid><category><![CDATA[Symfony]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Symfony 5&lt;/strong&gt; est disponible depuis le 21 Novembre 2019. Il est la suite logique de &lt;a href=&quot;/les-nouveautes-de-symfony-4&quot;&gt;Symfony 4&lt;/a&gt; qui a largement été applaudi par la communauté.&lt;/p&gt;
&lt;h2 id=&quot;une-version-simple-et-puissante&quot;&gt;&lt;a href=&quot;#une-version-simple-et-puissante&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Une version simple et puissante&lt;/h2&gt;
&lt;p&gt;Symfony dans sa &lt;a href=&quot;https://symfony.com/5&quot;&gt;cinquième version&lt;/a&gt; a été conçue pour être &lt;strong&gt;plus simple&lt;/strong&gt; à apprendre, à appréhender et à configurer. Bien sûr les installations et les déploiements ont été également grandement simplifiés. &lt;/p&gt;
&lt;p&gt;Afin d&apos;être dans la continuité de Symfony 4, cette nouvelle itération intègre &lt;strong&gt;Symfony Flex&lt;/strong&gt; afin d&apos;&lt;strong&gt;automatiser&lt;/strong&gt; un maximum les tâches d&apos;installation et configuration initiale. Les recettes de Symfony (Symfony recipes) utilisent largement ces concepts d&apos;automatisation afin de proposer des centaines de bundles ou plugins aux développeurs.&lt;/p&gt;
&lt;h2 id=&quot;légère-et-rapide&quot;&gt;&lt;a href=&quot;#l%C3%A9g%C3%A8re-et-rapide&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Légère et rapide&lt;/h2&gt;
&lt;p&gt;Comme la version 4, ce nouvel opus s&apos;allège grandement en supprimant plus de 37 000 lignes de code. De plus cet cure d&apos;amaigrissement associé à quelques améliorations architecturales apporte une amélioration de performance de l&apos;ordre de 7% sur la le coeur (core).&lt;/p&gt;
&lt;p&gt;La communauté, Symfony et Sensio vont donc dans le même sens que les développements de PHP: s&apos;alléger tout en proposant de meilleure performances à chaque itérations.&lt;/p&gt;
&lt;h2 id=&quot;une-meilleure-gestion-de-lutf-8&quot;&gt;&lt;a href=&quot;#une-meilleure-gestion-de-lutf-8&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Une meilleure gestion de l&apos;UTF-8&lt;/h2&gt;
&lt;p&gt;Cela avait été largement annoncé par la communauté mais Symfony 5 intègre un nouveau composant (appelé Component) appelé &lt;em&gt;String&lt;/em&gt; qui apporte une grande avancée: Une API orientée objet qui permet de travailler avec :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les bytes&lt;/li&gt;
&lt;li&gt;Les code points&lt;/li&gt;
&lt;li&gt;Les grapheme clusters&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette API simplifiera grandement la vie des développeurs lorsqu&apos;il faudra traiter ou manipuler des chaînes de caractères comme par exemple utiliser des fonctions de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;trim&lt;/li&gt;
&lt;li&gt;replace&lt;/li&gt;
&lt;li&gt;find in string&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;un-nouveau-composant-de-gestion-des-notifications&quot;&gt;&lt;a href=&quot;#un-nouveau-composant-de-gestion-des-notifications&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Un nouveau composant de gestion des notifications&lt;/h2&gt;
&lt;p&gt;Avec cette dernière version introduite par Fabien Potencier, il est mis en place un nouveau composant de gestion de notifications appelé Notifier. Comme son nom l&apos;indique il va permettre d&apos;envoyer des informations via de nombreux canaux comme Slack, Telegram, WhatsApp ou encore un simple email.&lt;/p&gt;
&lt;h2 id=&quot;la-gestion-des-secrets&quot;&gt;&lt;a href=&quot;#la-gestion-des-secrets&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;La gestion des secrets&lt;/h2&gt;
&lt;p&gt;Déjà introduite dans la dernière version de Symfony 4, la nouvelle gestion des secrets de SF5 est très appréciées. Ainsi à l&apos;aide d&apos;un jeu de clefs secrètes vous pourrez stocker des données sensibles de production (comme un mot de passe de base de données, une clef privée ou autre) entièrement chiffrée. Cette donnée pourra donc désormais être stockée dans votre gestionnaire de version préféré comme git. Et bien sûr cela a été bien intégré avec la gestion des environnements (.env).&lt;/p&gt;
&lt;h2 id=&quot;une-migration-facilitée&quot;&gt;&lt;a href=&quot;#une-migration-facilit%C3%A9e&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Une migration facilitée&lt;/h2&gt;
&lt;p&gt;Enfin, pourrions nous dire, la mise à jour de la version 4.4 de symfony vers la version 5 est plutôt simple et rapide. Il &lt;em&gt;suffi&lt;/em&gt; de supprimer toutes les dépréciations (fonctions, classes et librairies qui ne seront plus disponibles) et de lancer la migration.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Symfony 4 : un état des lieux avant la sortie]]></title><description><![CDATA[La sortie de  Symfony 4  approche à grand pas et est prévue pour fin Novembre (Yes!). Nous vous proposons de faire un dernier tour du…]]></description><link>https://www.integral-service.fr/symfony-4-un-etat-des-lieux-avant-la-sortie</link><guid isPermaLink="false">https://www.integral-service.fr/symfony-4-un-etat-des-lieux-avant-la-sortie</guid><category><![CDATA[Symfony]]></category><category><![CDATA[technologie web]]></category><category><![CDATA[Web]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;p&gt;La sortie de &lt;strong&gt;Symfony 4&lt;/strong&gt; approche à grand pas et est prévue pour fin Novembre (Yes!).&lt;/p&gt;
&lt;p&gt;Nous vous proposons de faire un dernier tour du propriétaire, plus complet que notre &lt;a href=&quot;/les-nouveautes-de-symfony-4&quot;&gt;précédent article&lt;/a&gt;, suite à l&apos;annonce de la mise à disposition de &lt;strong&gt;Symfony Beta 4&lt;/strong&gt;, dernière étape avant la sortie officielle de Symfony 4.0 stable.&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/issues4041-fac5f30cc0410c257a76b704ec89152a-54a89.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 960px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 22.289766970618036%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAIAAAABPYjBAAAACXBIWXMAAAsSAAALEgHS3X78AAAAkElEQVQI13WOywrCMBBF8///VhSsCnYjgkTMo6/JJGkmiWNBKYKHuzibe2cEAKSUaq2llJxLXWGvH7r+2qjj3p535tSo9jBe2qnjPIIW/RylcXcN0qC0/u2K3XkfEhGXiYjXaYVluysQkSjX/9xQusUvKf2Echazi2ZEO3G8HtzTAssA8VvmdXD8CBNY8ubyC2mV5xLjAYPXAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Etat d&apos;avancement Symfony 4.0&quot;
        title=&quot;&quot;
        src=&quot;/static/issues4041-fac5f30cc0410c257a76b704ec89152a-3bb8f.png&quot;
        srcset=&quot;/static/issues4041-fac5f30cc0410c257a76b704ec89152a-3ae1d.png 240w,
/static/issues4041-fac5f30cc0410c257a76b704ec89152a-c332d.png 480w,
/static/issues4041-fac5f30cc0410c257a76b704ec89152a-3bb8f.png 960w,
/static/issues4041-fac5f30cc0410c257a76b704ec89152a-54a89.png 987w&quot;
        sizes=&quot;(max-width: 960px) 100vw, 960px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;Cette présentation a pour objectif de faire une cartographie macroscopique des nouveautés introduites par cette version majeure.&lt;/p&gt;
&lt;h2 id=&quot;un-micro-framework-par-défaut&quot;&gt;&lt;a href=&quot;#un-micro-framework-par-d%C3%A9faut&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Un micro framework par défaut&lt;/h2&gt;
&lt;p&gt;Symfony 4 introduit un changement de philosophie et propose désormais aux développeurs de pouvoir utiliser et installer uniquement les composants qui lui sont strictement nécessaires.&lt;/p&gt;
&lt;p&gt;La nouvelle édition standard de symfony ne contient désormais que le core du framework qu&apos;on pourrait apparenter à un micro framework.
Comme vous pouvez le constater dans la capture ci-dessous d&apos;une installation Symfony 4 standard, on retrouve le strict nécessaire.&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/symfony-4-install-b2d5234c01cb349c9b263c96beed85eb-ed9b5.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 960px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 104.8780487804878%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC+0lEQVQ4y4VUyXLkOgxrb3G3F8n7breXTiV/8v7kHeb/7xiQTiaVSjJzYFG2JZgAQV2eAguv/gWv+B+u+Q9VXcNYgyzLYHOLoi0QpRGMMbDWoixL5HmOouD7KEIt+/ntcrmc4VoXxVogv2eI9hvcw4G7M2YH185HwXVzdwgWKKCAZVmuIGEYfgD9AZTDiwPvwdydQK6sJwdOdvkIy8h5IL58BfkESACnJcDAGLmueLC4KLjm/vzuCFDI8P4FGJPyTMpThttwVQABC2sfpnZguieUcwlTGO4j3TpDEAQ/A3qeh+N4YL3fkW8Z3M3BbfVRLiHGMcHra41ty9H1PfOGNE2ppdH8I+CdYNM0wgwp3jUVDePBg2Hu+YO6DjCNje7tCT7NM6qqguM4nwHlxTAM6LoOSRufWnanpqn1UVG/aXLZ2RDr2nNfq9YZhlGpS0HfVziOyBb7UaF0ezvXdRNgZqUPWqquY+z7roDTNPEnK3zf/17D7E6TP7twV0fDTj5/5uP1xWWOsK2T6qhAzGLuL5QFUDYM1CXtE7WO0PV6F1d2ueuumOeYFd6UqrB5nxqZpi9NOTUcVUMFfPOjN5yAt572mW+sJkLbXrEsN8RRoOACKN2WSj3P/ahQNFnYNbXN6vzRsaIH991jhQktNHK9cT0rIxnBf/rQUkNphL/4yAeflYd4ealw7CWr67h+UapCOfnJh0JZfNU2DZImPsevISgph6ScsNtl9UTPiQ+vqKuU4K3SFMoSX7osFATUjOa0DGkHlcuD7DKfNxq7KEq1SNO0Ciiafz/Lx5vv3oAcc9H46wXwt/BYiRlTmHuKKzXTy4Hhtx7i3kM0R0j3BHanbrSPPSzSNUF6T5AkiXbZdd3PGnZdr120lVXbOBVBqaMtA2p01e9yM/d9p1RVc9KWLM+fOv4+eo/nZzRTfU6KjB2lCHk5RFPA9wUPFvTgopPyHs88I7rK1AioAh/HAQm5ICSOx0MPjstIY4faTaEmNsnzs7NxHOvl+52GvwFr0eWXyjfEegAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Installation symfony 4&quot;
        title=&quot;&quot;
        src=&quot;/static/symfony-4-install-b2d5234c01cb349c9b263c96beed85eb-3bb8f.png&quot;
        srcset=&quot;/static/symfony-4-install-b2d5234c01cb349c9b263c96beed85eb-3ae1d.png 240w,
/static/symfony-4-install-b2d5234c01cb349c9b263c96beed85eb-c332d.png 480w,
/static/symfony-4-install-b2d5234c01cb349c9b263c96beed85eb-3bb8f.png 960w,
/static/symfony-4-install-b2d5234c01cb349c9b263c96beed85eb-ed9b5.png 1394w&quot;
        sizes=&quot;(max-width: 960px) 100vw, 960px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;Vous remarquerez entre autre la disparition de Doctrine, Twig, ... dans le socle. On verra un peu plus loin qu&apos;ils restent tout de même disponible.&lt;/p&gt;
&lt;h2 id=&quot;des-changements-dans-larborescence-des-dossiers&quot;&gt;&lt;a href=&quot;#des-changements-dans-larborescence-des-dossiers&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Des changements dans l&apos;arborescence des dossiers&lt;/h2&gt;
&lt;p&gt;Après avoir déjà eu le droit à un remaniement de la structure des dossiers pour les précédentes versions majeures de Symfony, SF 4 apporte aussi plusieurs modifications à ce sujet.
Comme vous pouvez le remarquer dans la capture d&apos;écran ci-dessous:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Suppression du dossier &lt;em&gt;web&lt;/em&gt; remplacé par un dossier &lt;em&gt;public&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Disparition du dossier &lt;em&gt;app&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Un dossier &lt;em&gt;config&lt;/em&gt; à la racine fait son apparition et contient l&apos;ensemble des configurations de votre projet par packages&lt;/li&gt;
&lt;li&gt;Une arborescence beaucoup plus &quot;plate&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/architecture-dossier-sf4-c747a3f5489091fad8f83255c2f01270-94693.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 530px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 205.66037735849054%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAApCAIAAAC6D54pAAAACXBIWXMAAAsSAAALEgHS3X78AAADGklEQVRIx51W2XKjVhQcAYILiFXsSIBAEotAINBiJ7bGrrxPZV7ykv//j7TllOOHjACfUt1CFM05NN19+cYw5NuXSxCkr4Pn87miKDRNZ1leVZUkSV8Bu66XJIkkydVuZ9mOpir9YCA/DmRZlqSZpuuiKLIsO6Lzoe22m22yWj1fr83h0B6aoWCOyLZ3kpRoHGHvY08oxjC3hJ9/nKen1IhnxgiCIJgbY/+jqH5k25co6LxBY0+nU9d1ozB0HMdfLOa6PpvNLMuybXvI2JTneUkcY/V8XxBFIB3HNU2jvzPLkbbrXl9e2sPhdL4sl0EYLEH5rtjdA2uaRgihKFpSQlldqfqaF4yhbL+DaZq13FbVt3hbhlWNe1UoH48qCFmWNm13OnYPl0uyXld1/ftvjwxN9csTK8spvGCK0kIQbcIbLIuh6KGdba/zls+We07Sn7b/yLKzocbAapomDgTRSsu/daMY4arPfwXxrSfDTGEvmIwnhLkVf6sesKqquMi0nLpuHNvO87ypq22aPj48wLr3xoZa86I4Ho/QSbWv8zSDYPNi19R7XdP6xwbJiCQoHP1pmsHtIFg8AibvIYwjQrPf100Tx8nL6+vC907n87FrKYq6R5iu6zhgpoIfXG3vgaKmI9j+T7Z6gGzACJ9Pfgjm34T7FRhuu7FtHU+X56cnkIdg26w3aZper1c4/38Upiiq7y/iOI6ikBB+vV7D5EPHBqtID1gNndEWpakqpp1MJv0Ztlgs27YNwwi7R3c84UZPT89N02iK/OsMY4k6Tw27VtSY8Po4P9MM7y8vshrLSvg5gMeFgRd8j7Z/JtnPdf7XCFe9q09ECDiu49gcyyJIoZlBYI7D9awiK0EYxfEKoZskMX790ctMySL6Q5vnX9mrUHA8VuSuIDrCzBVnLsKYI4h0eShhkhIgujSjMJ0DwKbdcEQfEUNv2zXDFHlWVfvNZnu+nOu6zrKsH4wAAG2gzrJMqBJhgECY3KoH/CbPZVCWZZplKzgjDPbNYeE598a+hRaLiEN2lNjayhKfJlVZ5lnB8/e+0v4BuYJi1qQkqqIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Nouvelle architecture des dossiers Symfony 4&quot;
        title=&quot;&quot;
        src=&quot;/static/architecture-dossier-sf4-c747a3f5489091fad8f83255c2f01270-94693.png&quot;
        srcset=&quot;/static/architecture-dossier-sf4-c747a3f5489091fad8f83255c2f01270-8cb18.png 240w,
/static/architecture-dossier-sf4-c747a3f5489091fad8f83255c2f01270-89e8a.png 480w,
/static/architecture-dossier-sf4-c747a3f5489091fad8f83255c2f01270-94693.png 530w&quot;
        sizes=&quot;(max-width: 530px) 100vw, 530px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;Pour les développeurs familiers avec la structure de dossier de Symfony 3, vous remarquerez de nombreux autres changements (déplacement de Kernel.php, modification de app.php en index.php etc...).&lt;/p&gt;
&lt;h2 id=&quot;12-factor-app&quot;&gt;&lt;a href=&quot;#12-factor-app&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;12 factor app&lt;/h2&gt;
&lt;p&gt;De nos jours, les applications sont bien souvent proposées avec des structures &quot;As A Service&quot;.
Le &lt;strong&gt;12 factor app&lt;/strong&gt; est une méthodologie pour créer des applications de ce type.
Pour en savoir plus n&apos;hésitez pas a lire la présentation en 12 chapitres de cette méthodologie sur le &lt;a href=&quot;https://12factor.net/&quot;&gt;site officiel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Dans les grandes lignes on peut retenir plusieurs objectifs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Maximiser la portabilité de l&apos;application en s&apos;appuyant le moins possible sur des dépendances du système d&apos;exploitation&lt;/li&gt;
&lt;li&gt;Être compatible avec les plateformes de déploiements modernes (Cloud, Paas, ...)&lt;/li&gt;
&lt;li&gt;Minimiser les différences entre les plateformes de production et développement et ainsi faciliter la mise en place du déploiement continu&lt;/li&gt;
&lt;li&gt;Permettre le scaling de l&apos;application sans avoir besoin de réaliser de grands changements dans l&apos;application&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Symfony 4 essaie de répondre au mieux à ces différentes problématiques.&lt;/p&gt;
&lt;h2 id=&quot;symfony-flex-et-les-recettes&quot;&gt;&lt;a href=&quot;#symfony-flex-et-les-recettes&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Symfony Flex et les recettes&lt;/h2&gt;
&lt;p&gt;Symfony 4 introduit l&apos;arrivée de &lt;strong&gt;Symfony Flex&lt;/strong&gt; le nouvel installateur officiel du framework.
Il remplace donc l&apos;ancien installateur de Symfony standard édition et est d&apos;ores et déjà compatible avec Symfony 3.3.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Symfony Flex n&apos;est pas une nouvelle version de Symfony, mais bel et bien un outil à part entière.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Symfony Flex améliore sensiblement les processus d&apos;installation dans Symfony et automatise les tâches (rébarbatives) comme installer ou désinstaller les bundles et la gestion de Composer.
Flex apporte notamment la possibilité d&apos;exécuter et automatiser des tâches avant et après l&apos;exécution d&apos;une tâche Composer.
Ainsi Flex apporte la possibilité, en plus de la gestion de l&apos;installation des librairies et bundles, de pouvoir les configurer automatiquement.&lt;/p&gt;
&lt;p&gt;L&apos;ensemble de ces tâches et fonctionnalités sont décrits sous forme de recette. Vous pouvez par exemple retrouver l&apos;ensemble des &lt;strong&gt;recettes symfony&lt;/strong&gt; pour les paquets Composer gérés par l&apos;équipe en charge du Core de Symfony comme:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API platform&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Doctrine&lt;/li&gt;
&lt;li&gt;Easy Admin&lt;/li&gt;
&lt;li&gt;Twig&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/symfony/recipes&quot;&gt;Lien vers le dépôt officiel&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;les-packages-officiels&quot;&gt;&lt;a href=&quot;#les-packages-officiels&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Les packages officiels&lt;/h3&gt;
&lt;p&gt;Avec cette nouvelle version de Symfony, de nombreux bundles sont désormais référencés sur les serveurs de Symfony Flex, leur donnant un caractère plus &lt;em&gt;officiel&lt;/em&gt; dans l&apos;écosystème Symfony.&lt;/p&gt;
&lt;h4 id=&quot;easyadminbundle&quot;&gt;&lt;a href=&quot;#easyadminbundle&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;EasyAdminBundle&lt;/h4&gt;
&lt;p&gt;Si vous avez besoin de développer une interface d&apos;administration pour votre site, &lt;a href=&quot;https://symfony.com/doc/master/bundles/EasyAdminBundle/index.html&quot;&gt;EasyAdminBundle&lt;/a&gt; vous facilitera grandement la vie.
Il permet, depuis un simple fichier de configuration, de générer les pages de CRUD (Create / Read / Update / Delete) de vos objets, avec un moteur de recherche et une gestion de la pagination et du tri.
Le tout dans une interface responsive pour s&apos;adapter à tous vos supports !&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/easyadmin-d79935f863118a72f9b35c300fe82ca6-87627.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 396px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 126.26262626262626%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAZABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAMCBAYF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAWXOLo0SPDMaWpbWZEP/xAAdEAACAQUBAQAAAAAAAAAAAAACAwQAATEyMxE0/9oACAEBAAEFAnyTBoXaY+NqX3VyDWX9KuQ4ZvbFf//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABYRAAMAAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPwEr/8QAHRAAAgICAwEAAAAAAAAAAAAAAAIBEHGRERIxMv/aAAgBAQAGPwJoiPDnsuj7XQ4mKcTFSRX/xAAfEAACAgEEAwAAAAAAAAAAAAAAAREhoRBBscFRgfH/2gAIAQEAAT8hSmaYQFRK3P1ZL39GB4L28syejE8CRdRb0+Np/9oADAMBAAIAAwAAABCv/jz/xAAWEQEBAQAAAAAAAAAAAAAAAAARABD/2gAIAQMBAT8QI3//xAAVEQEBAAAAAAAAAAAAAAAAAAARIP/aAAgBAgEBPxBh/8QAIhABAAIABQQDAAAAAAAAAAAAAQARITFBUaEQYbHwccHh/9oACAEBAAE/EK9kyy9BhSwGkww+ZZ6HMWFWg+EN+jgjbyXsJr3CMzzLr2RbH4o1Fiys9VnO+pwnjp//2Q==&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Page générée par EasyAdmin&quot;
        title=&quot;&quot;
        src=&quot;/static/easyadmin-d79935f863118a72f9b35c300fe82ca6-87627.jpg&quot;
        srcset=&quot;/static/easyadmin-d79935f863118a72f9b35c300fe82ca6-dce3a.jpg 240w,
/static/easyadmin-d79935f863118a72f9b35c300fe82ca6-87627.jpg 396w&quot;
        sizes=&quot;(max-width: 396px) 100vw, 396px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;h4 id=&quot;doctrine&quot;&gt;&lt;a href=&quot;#doctrine&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Doctrine&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;http://www.doctrine-project.org/projects/orm.html&quot;&gt;Doctrine&lt;/a&gt; reste bien sûr l&apos;ORM privilégié sous Symfony 4. Toujours bien interfacé avec Symfony, il vous permettra d&apos;interagir facilement avec votre base de données.&lt;/p&gt;
&lt;h4 id=&quot;apiplatform&quot;&gt;&lt;a href=&quot;#apiplatform&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;APIPlatform&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://api-platform.com/&quot;&gt;APIPlatform&lt;/a&gt; est un framework construit avec Symfony et conçu pour faciliter le développement d&apos;API REST ou GraphQL. &lt;/p&gt;
&lt;h4 id=&quot;et-bien-dautres-&quot;&gt;&lt;a href=&quot;#et-bien-dautres-&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Et bien d&apos;autres !&lt;/h4&gt;
&lt;p&gt;Vous pourrez trouver la liste des &lt;em&gt;recipes&lt;/em&gt; de Symfony Flex sur le &lt;a href=&quot;https://symfony.sh&quot;&gt;Symfony Recipes Server&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;les-contrôleurs&quot;&gt;&lt;a href=&quot;#les-contr%C3%B4leurs&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Les contrôleurs&lt;/h2&gt;
&lt;p&gt;Si vous avez l&apos;habitude de travailler avec Symfony 2 ou Symfony 3 jusqu&apos;à sa version 3.2, vous vous êtes peut-être déjà retrouvé coincé dans une situation où vous vous êtes demandé : &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Est-ce que je peux définir mon contrôleur en tant que service ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et si c&apos;est le cas, vous avez aussi sûrement vu cet avertissement dans la documentation de Symfony :&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/symfony-controller-service-b55d49692098585423fa1c57e90291c8-c6820.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 632px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 16.455696202531648%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAADABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAdqwgJ//xAAYEAACAwAAAAAAAAAAAAAAAAAAAhETQf/aAAgBAQABBQLYKkP/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAwEBPwFH/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFhAAAwAAAAAAAAAAAAAAAAAAABAx/9oACAEBAAY/AlD/xAAYEAADAQEAAAAAAAAAAAAAAAAAARExof/aAAgBAQABPyFiLg2Ovs//2gAMAwEAAgADAAAAEIA//8QAFhEBAQEAAAAAAAAAAAAAAAAAABFR/9oACAEDAQE/EEY//8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oACAECAQE/EG1//8QAGxABAAICAwAAAAAAAAAAAAAAAQARITFRgdH/2gAIAQEAAT8QAVMF6Id5zEQFW3L2f//Z&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Avertissement Symfony&quot;
        title=&quot;&quot;
        src=&quot;/static/symfony-controller-service-b55d49692098585423fa1c57e90291c8-c6820.jpg&quot;
        srcset=&quot;/static/symfony-controller-service-b55d49692098585423fa1c57e90291c8-067b4.jpg 240w,
/static/symfony-controller-service-b55d49692098585423fa1c57e90291c8-4b021.jpg 480w,
/static/symfony-controller-service-b55d49692098585423fa1c57e90291c8-c6820.jpg 632w&quot;
        sizes=&quot;(max-width: 632px) 100vw, 632px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;Dans cette nouvelle version de Symfony, non seulement définir les contrôleurs en tant que service n&apos;est plus considéré comme une mauvaise pratique, mais les &lt;strong&gt;contrôleurs sont des services par défaut&lt;/strong&gt; !&lt;/p&gt;
&lt;p&gt;Vous pouvez donc intéragir facilement avec eux depuis d&apos;autres services, et donc d&apos;autres contrôleurs.&lt;/p&gt;
&lt;h2 id=&quot;linjection-de-dépendance-automatique-autowiring&quot;&gt;&lt;a href=&quot;#linjection-de-d%C3%A9pendance-automatique-autowiring&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;L&apos;injection de dépendance automatique: Autowiring&lt;/h2&gt;
&lt;h3 id=&quot;quest-ce-que-cest-&quot;&gt;&lt;a href=&quot;#quest-ce-que-cest-&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Qu&apos;est-ce que c&apos;est ?&lt;/h3&gt;
&lt;p&gt;Cette fonctionnalité présente depuis la version 2.8 de Symfony, repensé dans la version 3.3 est maintenant activé par défaut.
Concrètement, il n&apos;est plus nécessaire de préciser dans la configuration les dépendances de vos services. &lt;/p&gt;
&lt;h3 id=&quot;comment-lautowiring-fonctionne-&quot;&gt;&lt;a href=&quot;#comment-lautowiring-fonctionne-&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Comment l&apos;autowiring fonctionne ?&lt;/h3&gt;
&lt;p&gt;Prenons une première classe ci-dessous avec une dépendance. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-none&quot;&gt;&lt;code&gt;  namespace AppBundle\Service;
  
  use AppBundle\Service\Categorie;

  class Produit
  {
      private $categorie;
  
      public function __construct(Categorie $categorie)
      {
          $this-&gt;categorie = $categorie;
      }
  }&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;Et ci-dessous la classe des catégories
&lt;br&gt;
namespace AppBundle\Service;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot;&gt;
      &lt;pre class=&quot;language-none&quot;&gt;&lt;code&gt;  class Categorie
  {
      private $name;
  
      public function getName()
      {
          return $this-&gt;name;
      }
  }&lt;/code&gt;&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;&amp;#x27;https://symfony.com/doc/master/service_container.html#service-container-services-load-example&amp;#x27;&quot;&gt;La configuration par défaut&lt;/a&gt; de Symfony 4 va permettre à ces deux classes d&apos;être automatiquement enregistrées en tant que service et d&apos;être liées selon leurs dépendances.&lt;/p&gt;
&lt;p&gt;Le système d&apos;autowiring va utiliser le type du paramètre indiqué dans le constructeur de la classe Produit (ou dans n&apos;importe quelle autre méthode) et cherche un service avec un ID qui correspond parfaitement à ce dernier.&lt;/p&gt;
&lt;p&gt;Trois cas sont possibles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si aucun service n&apos;a été défini pour ce type et si le type correspond à une classe non abstraite, alors la classe sera enregistrée automatiquement en tant que service privé, et celui-ci sera utilisé comme argument.&lt;/li&gt;
&lt;li&gt;Si un service défini dans le container correspond au type, alors un alias est créé pour ce service et l&apos;autowiring fonctionne de façon standard avec celui-ci&lt;/li&gt;
&lt;li&gt;Si deux services ou plus correspondent alors une exception est levée. Il sera alors nécessaire de créer un alias pour le service à utiliser ou alors de l&apos;indiquer de façon explicite dans la configuration. &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;en-résumé&quot;&gt;&lt;a href=&quot;#en-r%C3%A9sum%C3%A9&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;En résumé&lt;/h3&gt;
&lt;p&gt;L&apos;exemple ci-dessus se voulait simple, avec seulement deux classes, mais dans un contexte différent avec un grand nombre de dépendances et des dizaines de services, l&apos;intérêt de l&apos;autowiring est indéniable.
Dans tous les cas c&apos;est une évolution très agréable pour les développeurs.&lt;/p&gt;
&lt;p&gt;On notera que l&apos;autowiring ne fonctionne pas par magie, et l&apos;équipe de Symfony l&apos;a imaginé de façon à ce que son comportement reste prévisible. &lt;/p&gt;
&lt;h2 id=&quot;webpack-encore&quot;&gt;&lt;a href=&quot;#webpack-encore&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Webpack Encore&lt;/h2&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/webpack-encore-74b623fc75b93c22a80bc4f34802f01c-bca45.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 896px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 37.276785714285715%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAHABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB1qiSA//EABgQAQEBAQEAAAAAAAAAAAAAAAIBEgMR/9oACAEBAAEFAjHvx6B6Sf/EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAECAQE/AWf/xAAaEAACAgMAAAAAAAAAAAAAAAAAAQIRISJB/9oACAEBAAY/Ah5VcNpn/8QAGhAAAgMBAQAAAAAAAAAAAAAAAAERITFRcf/aAAgBAQABPyHQdCsZnGDzY59P/9oADAMBAAIAAwAAABADz//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAwEBPxAMn//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPxBaz//EABsQAQACAgMAAAAAAAAAAAAAAAEAESFhcYHw/9oACAEBAAE/EBNvFWXCKwsR2t59qGhqkowOXuf/2Q==&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Webpack Encore&quot;
        title=&quot;&quot;
        src=&quot;/static/webpack-encore-74b623fc75b93c22a80bc4f34802f01c-bca45.jpg&quot;
        srcset=&quot;/static/webpack-encore-74b623fc75b93c22a80bc4f34802f01c-62f27.jpg 240w,
/static/webpack-encore-74b623fc75b93c22a80bc4f34802f01c-b90cf.jpg 480w,
/static/webpack-encore-74b623fc75b93c22a80bc4f34802f01c-bca45.jpg 896w&quot;
        sizes=&quot;(max-width: 896px) 100vw, 896px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;h3 id=&quot;dans-webpack-encore-il-y-a-webpack&quot;&gt;&lt;a href=&quot;#dans-webpack-encore-il-y-a-webpack&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Dans &quot;Webpack Encore&quot; il y a &quot;Webpack&quot;&lt;/h3&gt;
&lt;p&gt;Initialement utilisé par la communauté REACT, Webpack est rapidement devenu un nouveau standard de l&apos;industrie Web pour gérer les assets du front-end. &lt;/p&gt;
&lt;p&gt;Les outils qui étaient précédemment largement utilisés dans ce domaines, les &lt;em&gt;task-runners&lt;/em&gt; tels que Grunt et Gulp, nécessitaient une lourde configuration,
qui devait être modifiée à chaque nouveau fichier ou lors de changements dans l&apos;organisation du code JavaScript et CSS. La plupart du temps, ces outils étaient
utilisés pour produire un fichier JS minifié et un fichier CSS minifié, utilisés sur l&apos;ensemble des pages du site. Pour ce faire, leurs fichiers
de configuration listaient l&apos;ensemble des assets à faire traiter par différents processus (transpile, concat, minimify, ...). &lt;/p&gt;
&lt;p&gt;Webpack se différencie de ces outils par son approche plus modulaire. Le fichier de configuration de Webpack va, pour chaque module, pointé vers
un &quot;point d&apos;entrée&quot;, qui est un fichier JS. Ce dernier va ensuite inclure les autres fichiers nécessaires (JS, CSS, images) via des directives &quot;require&quot; ou &quot;import&quot;.
En bout de chaîne Webpack va &quot;traiter&quot; tous ces fichiers hétérogènes pour sortir du code ou des assets compréhensibles par le navigateur.&lt;/p&gt;
&lt;p&gt;Webpack permet donc de générer pour chaque page des assets optimisés, ne contenant que le strict nécessaire à son bon fonctionnement.
La configuration de l&apos;outil peut sembler complexe, mais présente l&apos;avantage de ne nécessiter que peu de modification durant l&apos;évolution des projets,
puisque les dépendances sont gérés directement dans le code et non dans la configuration.&lt;/p&gt;
&lt;p&gt;Pour plus d&apos;informations sur webpack vous pouvez suivre &lt;a href=&quot;https://webpack.js.org/&quot;&gt;ce lien&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;une-configuration-fastidieuse-malgré-tous-ses-atouts&quot;&gt;&lt;a href=&quot;#une-configuration-fastidieuse-malgr%C3%A9-tous-ses-atouts&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Une configuration fastidieuse malgré tous ses atouts&lt;/h3&gt;
&lt;p&gt;Si sur le papier Webpack propose une réelle avancée par rapport aux &quot;task-runners&quot; Grunt &amp;#x26; Gulp, sa configuration n&apos;en est pas moins fastidieuse et beaucoup de développeurs rechignent encore à sauter le pas face à cette difficulté. &lt;/p&gt;
&lt;p&gt;C&apos;est en partant de ce constat que les équipes de SensioLabs on développé &quot;Webpack Encore&quot;, un webpack facile à utiliser et spécialement optimisé pour fonctionner avec Symfony (même si il peut aussi ête utilisé en dehors).&lt;/p&gt;
&lt;h3 id=&quot;la-meilleur-librairie-accessible-à-tous-avec-webpack-encore&quot;&gt;&lt;a href=&quot;#la-meilleur-librairie-accessible-%C3%A0-tous-avec-webpack-encore&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;La meilleur librairie accessible à tous avec Webpack Encore&lt;/h3&gt;
&lt;p&gt;Inspiré de &quot;Webpacker&quot; et &quot;Mix&quot;, &quot;Webpack Encore&quot; met la configuration à la portée de tous tout en étant spécialement optimisé pour fonctionner avec Symfony 4.&lt;/p&gt;
&lt;p&gt;Voila qui devrait lever les dernières réticences à son utilisation et permettra une utilisation avancée des assets dans Symfony.&lt;/p&gt;
&lt;h2 id=&quot;lavis-dintegral-service&quot;&gt;&lt;a href=&quot;#lavis-dintegral-service&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;L&apos;avis d&apos;Integral Service&lt;/h2&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/performance-63e8da7ce88678b89a6ce8f11ad71cfb-a2375.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 698px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 57.306590257879655%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAEEAwX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABuzSK6JCM/wD/xAAaEAACAwEBAAAAAAAAAAAAAAABAgADEiIz/9oACAEBAAEFAu3h2krs2jMTCTqjz//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAwEBPwENn//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EAB0QAAICAQUAAAAAAAAAAAAAAAABAhEQIUFhcaH/2gAIAQEABj8C1lXCLjN9Ms9Gtsf/xAAcEAACAgMBAQAAAAAAAAAAAAABEQAhQVGhMfD/2gAIAQEAAT8hZrmyrsQJ1FGQhedwAGjRsMwBnbkr81P/2gAMAwEAAgADAAAAEIMP/8QAFxEAAwEAAAAAAAAAAAAAAAAAARARYf/aAAgBAwEBPxCY4v/EABYRAAMAAAAAAAAAAAAAAAAAAAEQIf/aAAgBAgEBPxAxf//EAB0QAQACAgIDAAAAAAAAAAAAAAERIQBRMbFBYYH/2gAIAQEAAT8QhmfQEj6ly7MakplmHmNNecq+mhpxadAhYk2VXzJQUUFm23eNEGLOmf/Z&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Symfony 4 performance, qualité et simplicité&quot;
        title=&quot;&quot;
        src=&quot;/static/performance-63e8da7ce88678b89a6ce8f11ad71cfb-a2375.jpg&quot;
        srcset=&quot;/static/performance-63e8da7ce88678b89a6ce8f11ad71cfb-d219e.jpg 240w,
/static/performance-63e8da7ce88678b89a6ce8f11ad71cfb-995c8.jpg 480w,
/static/performance-63e8da7ce88678b89a6ce8f11ad71cfb-a2375.jpg 698w&quot;
        sizes=&quot;(max-width: 698px) 100vw, 698px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;Nous utilisons Symfony dans de nombreux projets d&apos;applications Web qui nécessitent une architecture robuste, évolutive et professionnelle.&lt;/p&gt;
&lt;p&gt;Symfony 4 est la suite logique aux évolutions successives du framework. Cette version est &lt;strong&gt;orientée performance&lt;/strong&gt; en proposant un framework standard minimaliste sur lequel on peut greffer uniquement les bundles ou librairies qui sont nécessaires.&lt;/p&gt;
&lt;p&gt;Cette version est aussi rafraichissante pour les développeurs car une bonne partie du travail qui était rébarbatif et apportait peut de valeur ajoutée dans les précédentes versions a été &lt;strong&gt;automatisé ou simplifié&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ce nouvel opus reste droit dans ses bottes et propose des nouveautés qui améliore encore la qualité de ce framework et confirme sa place dans les frameworks PHP professionnels.&lt;/p&gt;
&lt;h2 id=&quot;en-attendant-symfony-4&quot;&gt;&lt;a href=&quot;#en-attendant-symfony-4&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;En attendant Symfony 4&lt;/h2&gt;
&lt;p&gt;En attendant la sortie officielle, nous vous proposons une série de petits tutoriels ou démonstrations pour vous initier à cette nouvelle version.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.jdecool.fr/blog/2017/09/12/tutorial-jobeet-symfony-4-introduction.html&quot;&gt;Un  tutoriel français Jobeet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@fabpot/symfony-4-a-quick-demo-da7d32be323&quot;&gt;Une mini demo par Fabien Potencier&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Qu'est-ce qu'une Progressive Web App ?]]></title><description><![CDATA[Le meilleur du web avec les avantages de l'expérience mobile Une  Progressive Web App  (PWA)désigne une application à mi-chemin entre un…]]></description><link>https://www.integral-service.fr/quest-ce-quune-progressive-web-app</link><guid isPermaLink="false">https://www.integral-service.fr/quest-ce-quune-progressive-web-app</guid><category><![CDATA[veille web]]></category><category><![CDATA[technologie web]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;h2 id=&quot;le-meilleur-du-web-avec-les-avantages-de-lexpérience-mobile&quot;&gt;&lt;a href=&quot;#le-meilleur-du-web-avec-les-avantages-de-lexp%C3%A9rience-mobile&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Le meilleur du web avec les avantages de l&apos;expérience mobile&lt;/h2&gt;
&lt;p&gt;Une &lt;strong&gt;Progressive Web App&lt;/strong&gt; (PWA)désigne une application à mi-chemin entre un &lt;a href=&quot;/le-responsive-cest-normal&quot;&gt;site web responsive&lt;/a&gt; et une application mobile.&lt;/p&gt;
&lt;p&gt;C&apos;est une solution technique qui permet d&apos;améliorer l&apos;expérience utilisateur (UX) en fournissant les avantages des dernières technologies web sur une interface semblable à celle d&apos;une application. &lt;/p&gt;
&lt;p&gt;Concrètement, lorsqu&apos;un utilisateur se rend sur votre PWA depuis son smartphone ou sa tablette ou à l&apos;aide de son navigateur de son PC, il aura l&apos;impression d&apos;utiliser une application. &lt;/p&gt;
&lt;p&gt;Cela permet non seulement de rendre votre application plus intuitive et agréable à utiliser, mais elle restera également consultable en mode hors ligne. &lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/Progressive-web-app-95f003a1d7097648adbf4b9569ecf508-2edc5.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 412px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 93.68932038834951%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAATABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgQD/9oADAMBAAIQAxAAAAGtp7TPNrQZYKgGP//EABkQAAMBAQEAAAAAAAAAAAAAAAABEQIDEv/aAAgBAQABBQKHSQvo1lopY3ptH//EABcRAQEBAQAAAAAAAAAAAAAAAAEQESH/2gAIAQMBAT8BzjBn/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQAhEP/aAAgBAgEBPwFdLZOf/8QAGRAAAwADAAAAAAAAAAAAAAAAAAEQETEy/9oACAEBAAY/AjnESqNz/8QAHRAAAwACAgMAAAAAAAAAAAAAAAERIUEQUTFxkf/aAAgBAQABPyFspdmC19CMrwOjLtKex1oTRdkY8OP/2gAMAwEAAgADAAAAEFzQPf/EABgRAQADAQAAAAAAAAAAAAAAAAEAEBFB/9oACAEDAQE/EAaEc5EMBr//xAAZEQEAAgMAAAAAAAAAAAAAAAABABEQITH/2gAIAQIBAT8QWp7BpshKqY//xAAcEAEBAQACAwEAAAAAAAAAAAABEQAxcRAhUaH/2gAIAQEAAT8QFRhCdYOhEBB+hkORMrMog9zGorZS1etccITnMDjjxyqyHzx//9k=&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Progressive Web App&quot;
        title=&quot;&quot;
        src=&quot;/static/Progressive-web-app-95f003a1d7097648adbf4b9569ecf508-2edc5.jpg&quot;
        srcset=&quot;/static/Progressive-web-app-95f003a1d7097648adbf4b9569ecf508-90fc9.jpg 240w,
/static/Progressive-web-app-95f003a1d7097648adbf4b9569ecf508-2edc5.jpg 412w&quot;
        sizes=&quot;(max-width: 412px) 100vw, 412px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;h2 id=&quot;pourquoi-choisir-une-pwa--&quot;&gt;&lt;a href=&quot;#pourquoi-choisir-une-pwa--&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pourquoi choisir une PWA  ?&lt;/h2&gt;
&lt;h3 id=&quot;une-majorité-dinternautes-sur-les-smartphones&quot;&gt;&lt;a href=&quot;#une-majorit%C3%A9-dinternautes-sur-les-smartphones&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Une majorité d&apos;internautes sur les smartphones&lt;/h3&gt;
&lt;p&gt;Depuis octobre 2016 les internautes privilégient en majorité la consultation des sites sur les smartphones et tablettes, au niveau mondial.&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/part-de-marche-mobile-pc-c6278350e493fee3ac479852bd784965-802fe.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 960px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 47.51718869365928%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsSAAALEgHS3X78AAAAfUlEQVQoz6VQ2w5DIQjz/79XpdzmELblZE/bsWkaRIFKe9zCSjQ2gg3YhG79r/grGy1IO2Wj0NEHBn9InTElgqpv6wJhrbsgZ6AuHKZscjI8lr5t1+tUU//RtrkCaPcWFmNEpB1tex3gbDIRxdcZXMEGbe5jJl73VxDcPYqfNHhP1/2fzkIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Evolution des parts de marché entre le mobile et le PC&quot;
        title=&quot;&quot;
        src=&quot;/static/part-de-marche-mobile-pc-c6278350e493fee3ac479852bd784965-3bb8f.png&quot;
        srcset=&quot;/static/part-de-marche-mobile-pc-c6278350e493fee3ac479852bd784965-3ae1d.png 240w,
/static/part-de-marche-mobile-pc-c6278350e493fee3ac479852bd784965-c332d.png 480w,
/static/part-de-marche-mobile-pc-c6278350e493fee3ac479852bd784965-3bb8f.png 960w,
/static/part-de-marche-mobile-pc-c6278350e493fee3ac479852bd784965-802fe.png 1309w&quot;
        sizes=&quot;(max-width: 960px) 100vw, 960px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
     &lt;/p&gt;
&lt;p&gt;Il est donc primordial pour votre site web ou votre application d&apos;être optimisé pour une utilisation sur smartphones et tablette.&lt;/p&gt;
&lt;h3 id=&quot;ce-nest-pas-une-application-mobile&quot;&gt;&lt;a href=&quot;#ce-nest-pas-une-application-mobile&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Ce n&apos;est pas une application mobile&lt;/h3&gt;
&lt;p&gt;Par ailleurs, une PWA  &lt;strong&gt;n&apos;est pas&lt;/strong&gt; une application mobile, ce qui présente plusieurs avantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Le cout de développement d&apos;une PWA est inférieur à celui d&apos;une application mobile&lt;/strong&gt; : Créer votre application mobile native, nécessite un développement pour chacune des plateformes iOS, Android et parfois Windows Mobile, ce qui fait doubler ou tripler le prix total de l&apos;application.  Le développement d&apos;une application adapté à toutes les plateformes permet donc de réaliser des économies.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Les coûts de maintenances sont réduits&lt;/strong&gt; : La maintenance d&apos;une application mobile native, disponible sur plusieurs plateformes, est plus couteuse que la maintenance d&apos;une seule application développée en PWA. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;L&apos;utilisateur n&apos;a pas besoin de télécharger votre application&lt;/strong&gt; : Il peut tout simplement y accèder via son navigateur et vous évitez de devoir publier des applications sur les différents stores App Store, Play Store et Windows Store. De plus, il est tout à fait possible de proposer à vos utilisateurs d&apos;avoir une icône raccourcie, ressemblant en tout point à celle d&apos;une application, sur son support mobile. Ainsi une progressive Web App ressemble et se comporte de la même manière qu&apos;une application native mais cette application est une application web.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;S&apos;affranchir des délais de publication d&apos;une app sur les stores&lt;/strong&gt; : En effet aujourd&apos;hui les délais de publication d&apos;une app mobile sur les différents stores peuvent être contraignants. De plus cela permet de supprimer les comissions reversées à Google ou Apple lorsque vous réalisez des ventes via l&apos;achat in-app. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Une personnalisation sans limite&lt;/strong&gt; : Toute la puissance des technologies web est disponible pour produire une application innovante sous de nombreux aspects.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il existe cependant quelques inconvénients à la réalisation d&apos;une PWA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Les performances&lt;/strong&gt; : Si vous souhaitez réaliser une application entièrement disponible en mode hors ligne et que le volume de données à stocker est important cela peut devenir problématique. Dès ce moment vous pouvez vous tourner vers des &lt;a href=&quot;/application-mobile&quot;&gt;applications mobiles hybrides ou natives&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Les anciens navigateurs sont un problème&lt;/strong&gt; : Les navigateurs trop anciens ne permettent pas de faire fonctionner les progressive web app de manière optimale. Cela s&apos;explique particulièrement par le fait qu&apos;ils n&apos;ont pas de gestion du mode hors ligne, ou encore un moteur technique trop ancien.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;les-avantages-du-matériel-mobile&quot;&gt;&lt;a href=&quot;#les-avantages-du-mat%C3%A9riel-mobile&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Les avantages du matériel mobile&lt;/h3&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/whatwebcandotoday-646c8c079915d348a69b97a7325f0856-e98dd.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 960px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 88.98071625344352%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAIAAADUsmlHAAAACXBIWXMAAAsSAAALEgHS3X78AAACmUlEQVQ4y5VTXU/UQBTtf/PFRBNi9FnxWfktxkg0qBBiJMqHMcpqAkgiSNjdfrCfyHbZbXens22ns2132e6ywoOedkpDwpM3N5P29J6Zc++ZShcXF5X8QcVon10L0zR7vR5Wx3Ysy6IWdRzn7EZI5+fndGPh+d5OcBW+71erVVlRisWioiiqqmLRNC24ERJOxoe2RfwkmMdwJqU0XnuUuy6ecbht24Bc1/WvhWQMw6f723P72493c7O7uUc/Nuf2tt43ak/2tpAAH+5sIlebx8DxdTYpEymNp9OCflJs6gW9IbeaNUp+25QG/kG9Vmg2VLMFBOkMgnLXzOsnKNM6bQHGsqEwngqlfb+PTsIwjKJIqM3w8Xjc55wQAaSVMRkvRrvd6XTwwPtckOv1umkY8cCZgxmCjIGfnp4C6XRMjCMmX15eMs5txlzu+YMBMhgOo8mE9KjjeQ5jWP3AH08mrM/hmB0jcXE/DKUTn8/k1u5urt76vCLywfdP8xVlJrd+L7d++8sHAb6pH93/tgHwztePWWUsGzagFc+2hXtCtq7rqUlOjEM2Y6zT7WYNpz0bhtFuNoGyhC/IpVKp0Whgiy7pwnyQYXytVmvqeg+XIvBTMrYnhNg9O+jzjIxpiZOzaXueR5JxY6/0ZCcavSorL8vKMy0vcqGi/iQmwPmSnIG/aBc4wBdHxQyU+DhaPpIXlfxr+fCtkn9XVteOK0VKltQCcrmivqtqSM22VirqYlxzuFSSBRjLhhiYjH+Hcw5LhexWqwVLCelmsnHjMQRiEZ50l/Ysbph71UlGBi3gngDFJcF27MqU9JI4+GMohWGYIZiDwQClkEOTgFUAJ5OJ6zpGMkXGWZiENBqNFFn++z8x/TMdjIZ2dPYPylqev5XDk7kAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Liste des fonctionnalités d&apos;un smartphone accessible par les technologies web&quot;
        title=&quot;&quot;
        src=&quot;/static/whatwebcandotoday-646c8c079915d348a69b97a7325f0856-3bb8f.png&quot;
        srcset=&quot;/static/whatwebcandotoday-646c8c079915d348a69b97a7325f0856-3ae1d.png 240w,
/static/whatwebcandotoday-646c8c079915d348a69b97a7325f0856-c332d.png 480w,
/static/whatwebcandotoday-646c8c079915d348a69b97a7325f0856-3bb8f.png 960w,
/static/whatwebcandotoday-646c8c079915d348a69b97a7325f0856-e98dd.png 1089w&quot;
        sizes=&quot;(max-width: 960px) 100vw, 960px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    
source: &lt;a href=&quot;https://whatwebcando.today/=&quot;&gt;https://whatwebcando.today/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Une PWA permet d&apos;utiliser la plupart des fonctionnalités d&apos;un prériphérique mobile&lt;/strong&gt;. Il sera donc tout à fait possible de l&apos;utiliser en mode hors ligne, d&apos;envoyer des notifications, d&apos;utiliser la géolocalisation ou encore de détecter l&apos;inclinaison d&apos;un smartphone par exemple.&lt;/p&gt;
&lt;p&gt;Par ailleurs, Windows pense à &lt;a href=&quot;https://blogs.windows.com/msedgedev/2016/07/08/the-progress-of-web-apps/&quot;&gt;inclure les PWA dans son store&lt;/a&gt; et Google à également &lt;a href=&quot;https://infrequently.org/2016/06/pwa-discovery-you-aint-seen-nothin-yet/&quot;&gt;des idées&lt;/a&gt; pour celles-ci. &lt;/p&gt;
&lt;h2 id=&quot;les-concepts-clés-dune-pwa&quot;&gt;&lt;a href=&quot;#les-concepts-cl%C3%A9s-dune-pwa&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Les concepts clés d&apos;une PWA&lt;/h2&gt;
&lt;p&gt;Une progressive web app, c&apos;est avant tout une expérience utilisateur et c&apos;est pour cela qu&apos;elle répond à trois grands principes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la fiabilité&lt;/li&gt;
&lt;li&gt;la rapidité et fluidité&lt;/li&gt;
&lt;li&gt;la séduction de l&apos;utilisateur&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces trois points font en partie la réussite ou non d&apos;une PWA.&lt;/p&gt;
&lt;h3 id=&quot;fiable&quot;&gt;&lt;a href=&quot;#fiable&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Fiable&lt;/h3&gt;
&lt;p&gt;L&apos;une des caractéristiques majeures d&apos;une PWA c&apos;est sa capacité à fonctionner hors ligne. Une fois que l&apos;utilisateur à accédé à l&apos;application une première fois, il pourra l&apos;utiliser indépendament de l&apos;état de sa connexion internet. Cela à pour avantage de limiter les temps de chargement et donc de fluidifier l&apos;utilisation générale de l&apos;application.&lt;/p&gt;
&lt;h3 id=&quot;rapide&quot;&gt;&lt;a href=&quot;#rapide&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Rapide&lt;/h3&gt;
&lt;p&gt;Plus de la moitié des utilisateurs abandonneront l&apos;application si le temps de chargements de celle-ci est supérieur à 3 secondes. Une fois l&apos;&lt;a href=&quot;/application-web&quot;&gt;application web&lt;/a&gt; lancée, il est impératif que les interfaces graphiques soient fluides et rapides. Chaque action de l&apos;utilisateur doit amener une réponse visuelle immédiate de la prise en compte de l&apos;action.&lt;/p&gt;
&lt;h3 id=&quot;engageante&quot;&gt;&lt;a href=&quot;#engageante&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Engageante&lt;/h3&gt;
&lt;p&gt;Sur mobile ou tablette lors de la visite de votre app, l&apos;utilisateur est invité à installer l&apos;application dès l&apos;écran d&apos;acceuil. De plus, il est possible pour votre pwa d&apos;envoyer des notifications comme une application native. Ces notifications peuvent par exmeple vous permettre de proposer ou d&apos;alerter vos utilisateurs de l&apos;arrivée d&apos;un nouveau contenu, d&apos;une évolution des fonctionnalités de l&apos;app, ...&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;&lt;a href=&quot;#conclusion&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Le nombre croissant des &lt;a href=&quot;http://www.larousse.fr/dictionnaires/francais/mobinaute/10910421&quot;&gt;mobinautes&lt;/a&gt; pousse le web à évoluer et s&apos;adapter aux contraintes liées à ce format. La PWA est une technique de développement récente, accolmpagné de languages tout aussi jeunes, qui permet de faciliter la création d&apos;application web à destination de ces supports. &lt;/p&gt;
&lt;p&gt;Cette solution technique peut laisser penser à un futur où les applications fonctionneront indépendament de leurs plateformes et cela grâce aux &lt;a href=&quot;/technologies-web&quot;&gt;technologies du web&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Par ailleurs, la PWA est une solution idéale pour mutualiser les coûts et raccourcir les délais de développement. &lt;/p&gt;
&lt;p&gt;Le retours sont pour l&apos;instant positifs avec des sites comme &lt;a href=&quot;https://developers.google.com/web/showcase/2016/aliexpress&quot;&gt;Ali Express&lt;/a&gt; qui a augmenté sont taux de nouveaux utilisateurs de plus de 100% gràace à sa PWA, ou  &lt;a href=&quot;https://developers.google.com/web/showcase/2016/konga&quot;&gt;Konga&lt;/a&gt; qui a diminué le poids de son application de 92% en migrant vers une PWA et a donc rendu son utilisation plus fluide, rapide et légère. &lt;/p&gt;
&lt;p&gt;La création de PWA par des géants de la presse tels que le Washington post, le Financial Times ou encore L’Équipe démontre également la fiabilité et la valeur ajoutée de cette technologie.&lt;/p&gt;
&lt;p&gt;Nous vous proposons ci-dessous de découvrir quelques exemples de Progressive Web Apps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://kongax.konga.com/&quot;&gt;Konga&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;m.aliexpress.com&quot;&gt;Ali Express&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pokedex.org/&quot;&gt;Pokedex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/home&quot;&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous trouverez &lt;a href=&quot;https://zuperkulblog.appspot.com/art/list&quot;&gt;ici&lt;/a&gt; encore plus d&apos;exemples de pwa.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Le responsive c'est normal]]></title><description><![CDATA[Qu'est-ce que le responsive web  design ? Le responsive Web design (RWD) est une approche de conception Web qui permet d'élaborer des sites…]]></description><link>https://www.integral-service.fr/le-responsive-cest-normal</link><guid isPermaLink="false">https://www.integral-service.fr/le-responsive-cest-normal</guid><category><![CDATA[actualité]]></category><category><![CDATA[technologie web]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;h2 id=&quot;quest-ce-que-le-responsive-web--design-&quot;&gt;&lt;a href=&quot;#quest-ce-que-le-responsive-web--design-&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Qu&apos;est-ce que le responsive web  design ?&lt;/h2&gt;
&lt;p&gt;Le responsive Web design (RWD) est une approche de conception Web qui permet d&apos;élaborer des sites offrants un expérience d&apos;utilisation optimale quelque soit l&apos;appareil utilisé. &lt;/p&gt;
&lt;p&gt;En prenant exemple sur ce site voici ce que peut donner le rendu d&apos;un site responsive sur de multiples supports.

  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/responsive-d73e085d66b8351faaade03c435bc1b9-f95ce.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 930px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 63.2258064516129%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsSAAALEgHS3X78AAACjUlEQVQoz3VSW0/aABTuT9rMXl2WvZgle1qyZHHuARNvBC8I3XDR+SC6eRnoNBEjFVtRdIwtiFMiOvAGWBSUS5VSKFhJuEgntEgRI2v2YDKnX3KSk3O+75zkfAcol8sQBIEgKJVKwf8gBaWyd7Jeed/A4NCsdrb8LwA+eFIikeCTq6srhmFp+jdN05lMhk8Yhrm8vORbOEHodPP3iovFIkmEAgeeCB6MhbB0PIqFqHWUcAZO6XwpHA4jiPZucSqVIiMkol8Ri0TwxJdPI8o+eVdzl/KpeEYwbLEdp6loBEGQezcXChdO1LOyYo7GTjCvmwz6DnHKuBO0+uNnxTIRwjWa6dtisbi9oaFBqVCCb2WKzyOLJrN3b59OprPJlMfl9hz6ksnkRYHDcVytVt8W8yc5z2YZlsWwI6GgVtYt72yXLagmI16/SoXUCSVjo2PzugUYRuBpZGZGu7T0c9WyZrFuOBxOAA/iQQyLEkf27c0Pnd0jQ8N63cKiXr9uMhq+fpub1/t9/iLH5XLZXPacyeVyDJtlC/kCh6IoAM8Z1KpxGIFEjXUVDx8IBIKamprKyscVFY+qq18rFIoJNSLv6Zd3tKtG+5sloKhX96RleuiHZ3d3F9hwHaOBU9R14HZ70hk6fXYWwI5+WTdMpmWKipMkuWhattq2nA57jAzhmH/HG1tGQ/5EfntrG3guHHjVDb988UarneMNI4iw3e4wm1eNRpPP50dde5OTMKTRWcxrcRw/IWPWdZtrb5+iKJvNBkDQlFoNTU1pWlvbnlVVbW1u8t9S+It8Ps+PqK8XNjY1t7VK3kvAvo+DYmlHbVNLj1xuMHwHbu7OcRzLsqVS6aZyfc0Xi7wd7F3g+X8ADAlSknak/h0AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Site Integral sur de multiples supports&quot;
        title=&quot;&quot;
        src=&quot;/static/responsive-d73e085d66b8351faaade03c435bc1b9-f95ce.png&quot;
        srcset=&quot;/static/responsive-d73e085d66b8351faaade03c435bc1b9-f2f24.png 240w,
/static/responsive-d73e085d66b8351faaade03c435bc1b9-04a68.png 480w,
/static/responsive-d73e085d66b8351faaade03c435bc1b9-f95ce.png 930w&quot;
        sizes=&quot;(max-width: 930px) 100vw, 930px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
     &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les enjeux du responsive design sont nombreux et pas uniquement techniques.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Le responsive Web Design est une des techniques parmis tant d&apos;autres pour rendre un site &quot;mobile friendly&quot;. En effet il n&apos;y a pas que l&apos;affichage qui est un facteur différenciant sur mobile. On retrouve principalement trois grands critères:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;La taille des écrans&lt;/strong&gt;. Le rendu visuel d&apos;un site web ne peut pas être le même sur un mobile et un PC ne serait-ce que pour le confort d&apos;utilisation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le débit de la connexion&lt;/strong&gt;. Aujourd&apos;hui ce n&apos;est plus forcément 100% vrai mais le débit d&apos;une connexion d&apos;un ordinateur est souvent plus élevé que celui d&apos;un smartphone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La prise en main et la navigation&lt;/strong&gt;. Il existe une grande différence entre naviguer à la souris et au doigt.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;les-usages-évoluent&quot;&gt;&lt;a href=&quot;#les-usages-%C3%A9voluent&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Les usages évoluent&lt;/h2&gt;
&lt;p&gt;Il vous suffit d&apos;observer vos voisins dans les transports en commun. Tout le monde regarde son smartphone ou sa tablette tactile.  Alors qu&apos;en 2014, en France, 55% de la population accédait à Internet à l&apos;aide de son smartphone, aujourd&apos;hui &lt;a href=&quot;https://www.blogdumoderateur.com/barometre-numerique-france-2016-credoc/&quot;&gt;cela a bien augmenté&lt;/a&gt; selon les chiffres en provenance du baromètre du Numérique publié par l’ARCEP. &lt;/p&gt;
&lt;p&gt;Chez Integral Service nous observons, parmis les statistiques d&apos;audience de nos clients, une nette augmentation des visites des sites ou applications sur smartphone. Certains atteignent même plus de 90% de visites sur mobile !&lt;/p&gt;
&lt;p&gt;Quand on observe ces statistiques on se rend bien compte que l&apos;accessibilité des sites se doit d&apos;être irréprochable sur mobile et tablette.&lt;/p&gt;
&lt;h2 id=&quot;google-sen-mêle&quot;&gt;&lt;a href=&quot;#google-sen-m%C3%AAle&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Google s&apos;en mêle&lt;/h2&gt;
&lt;p&gt;Cela fait plusieurs mois que Google augmente petit à petit l&apos;importance d&apos;être &lt;strong&gt;mobile ready&lt;/strong&gt;. Google ne se cache plus sur les risques de déclassement des sites pas ou peu accessibles sur mobile. Même s&apos;il semble que l&apos;algorithme de Google utilise encore prioritairement le contenu des &lt;strong&gt;sites accessibles&lt;/strong&gt; en Desktop pour le référencement, la tendance est en train de s&apos;inverser. &lt;/p&gt;
&lt;p&gt;Il y a quelques temps, l&apos;outil pour les webmaters &lt;strong&gt;Google Webmaster Tools&lt;/strong&gt; a été mis à jour pour intégrer un testeur de site mobile. Cela vous permet de vous rendre compte de comment la version mobile de votre site est prise en charge par le moteur de recherche.&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/render-google-36202dabd57e836ab3bf0eb19de71416-dbaef.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 960px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 15.953654188948308%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAIAAAAcOLh5AAAACXBIWXMAAAsSAAALEgHS3X78AAAAXklEQVQI15XLXQqAIBAEYO9/t6A/SoqCLrAG6u66ZWU+BNFTHwwMA6MMmDU7/1P+5lIQkYg8Cct+vMUYn05dzaMm3YZlVsycbkwsIuEjjekJANbaLXNVgX3j25Km4QLQga3hgFnCIwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Fetch as google dans les Google Webmaster Tools&quot;
        title=&quot;&quot;
        src=&quot;/static/render-google-36202dabd57e836ab3bf0eb19de71416-3bb8f.png&quot;
        srcset=&quot;/static/render-google-36202dabd57e836ab3bf0eb19de71416-3ae1d.png 240w,
/static/render-google-36202dabd57e836ab3bf0eb19de71416-c332d.png 480w,
/static/render-google-36202dabd57e836ab3bf0eb19de71416-3bb8f.png 960w,
/static/render-google-36202dabd57e836ab3bf0eb19de71416-dbaef.png 1122w&quot;
        sizes=&quot;(max-width: 960px) 100vw, 960px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;On peut aussi noter que Google a ajouté sur la requête &lt;strong&gt;mobile friendly&lt;/strong&gt; son &lt;a href=&quot;https://search.google.com/test/mobile-friendly&quot;&gt;testeur de site mobile&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/mobile-friendly-1da1aeab25fd82cdf8493ff78b2b2079-9de64.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 787px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 38.75476493011436%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsSAAALEgHS3X78AAAAwElEQVQY05WR4Q7CIAyEef+H9Mec04HZGHQtJZN5c1OjiVG/kABNr/SoUburjq2E4PveWuusSymVUi6fmaZL5EwyGYh3+zOHKMzjDYjzN1Q4aTbrJameevVxjDFSjCiBAzMTkfcDYmCTqXrvkRBCMOVOICFaHqdx5KUNSiJosnzGzBtl/p+HeO66rm3b5tAsq2n2VeWc05yXwq+geRHB1zzFcAgbwzDAErb1jIw3MYwgXtc1RrOJEcUAfl94HF94BStV0jvKmKLMAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Mobile friendly dans les résultats de la recherche&quot;
        title=&quot;&quot;
        src=&quot;/static/mobile-friendly-1da1aeab25fd82cdf8493ff78b2b2079-9de64.png&quot;
        srcset=&quot;/static/mobile-friendly-1da1aeab25fd82cdf8493ff78b2b2079-ceefe.png 240w,
/static/mobile-friendly-1da1aeab25fd82cdf8493ff78b2b2079-bd119.png 480w,
/static/mobile-friendly-1da1aeab25fd82cdf8493ff78b2b2079-9de64.png 787w&quot;
        sizes=&quot;(max-width: 787px) 100vw, 787px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;Il semblerait même que Google soit en train d&apos;expérimenter une nouvelle mise à jour de son algorithme de recherche en prenant en compte en priorité le contenu disponible sur mobile. Il devient évident que le côté responsive des sites joue déjà dans la balance du &lt;strong&gt;référencement naturel&lt;/strong&gt; et que cela ne va faire qu&apos;augmenter.&lt;/p&gt;
&lt;h2 id=&quot;les-technologies-sont-éprouvées&quot;&gt;&lt;a href=&quot;#les-technologies-sont-%C3%A9prouv%C3%A9es&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Les technologies sont éprouvées&lt;/h2&gt;
&lt;p&gt;Aujourd&apos;hui il est important d&apos;apporter un soin tout particulier pour rendre un site ou une application responsive ou en tout cas Mobile friendly. Pour se faire il est nécessaire de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Penser le design du site sur Desktop, Mobile et Tablette au minimum&lt;/li&gt;
&lt;li&gt;Faire un peu de technique et optimiser&lt;/li&gt;
&lt;li&gt;Utiliser des technologies web adaptées&lt;/li&gt;
&lt;li&gt;Tester le rendu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Certes, cela demande du temps et des compétences supplémentaires, mais aujourd&apos;hui les &lt;a href=&quot;https://www.integral-service.fr/technologies-web&quot;&gt;technologies web&lt;/a&gt; permettent de répondre à l&apos;ensemble de cette problématique.&lt;/p&gt;
&lt;h2 id=&quot;mobile-friendly-cest-la-norme&quot;&gt;&lt;a href=&quot;#mobile-friendly-cest-la-norme&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Mobile friendly, c&apos;est la norme&lt;/h2&gt;
&lt;p&gt;Les internautes sont de plus en plus nombreux à utiliser différents supports pour consommer internet, Google prend en compte et donne un bonus à tout ceux qui ont un site accessible sur mobile et il existe de nombreuses techniques pour rendre un site &quot;Mobile friendly&quot;.&lt;/p&gt;
&lt;p&gt;A une époque, opter pour le responsive design ou une version &lt;strong&gt;mobile friendly&lt;/strong&gt; de son site était un &quot;plus&quot;. Aujourd&apos;hui, pour une organisation souhaitant optimiser sa présence sur le Web, fournir un nouvel outil à ses collaborateurs ou encore offrir un nouveau service à ses client, &lt;strong&gt;ce n&apos;est plus un choix, c&apos;est devenu la norme&lt;/strong&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Le HTTPS devient incontournable]]></title><description><![CDATA[Qu'est-ce que le HTTPS ? Le HTTPS (HyperText Transfer Protocol Secure) est un protocole sécurisé de communication entre un serveur et un…]]></description><link>https://www.integral-service.fr/le-https-devient-incontournable</link><guid isPermaLink="false">https://www.integral-service.fr/le-https-devient-incontournable</guid><category><![CDATA[veille]]></category><category><![CDATA[sécurité]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;h2 id=&quot;quest-ce-que-le-https-&quot;&gt;&lt;a href=&quot;#quest-ce-que-le-https-&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Qu&apos;est-ce que le HTTPS ?&lt;/h2&gt;
&lt;p&gt;Le HTTPS (HyperText Transfer Protocol Secure) est un protocole sécurisé de communication entre un serveur et un navigateur donc créé pour le Web. Le HTTPS c&apos;est donc l&apos;utilisation du HTTP couplé avec une couche de sécurité (par exemple SSL ou TLS). &lt;/p&gt;
&lt;p&gt;Le HTTPS à la différence du HTTP permet deux choses :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Contrôler et confirmer l&apos;identité du site web que vous visitez&lt;/li&gt;
&lt;li&gt;Chiffrer les données échangées entre le navigateur web et le serveur web&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&apos;utilisation d&apos;un certificat HTTPS valide se décrit sur votre navigateur comme dans l&apos;image ci-dessous :

  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/https-integral-service-a568461cf2ba95791f3e3847a1038103-eac32.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 316px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 11.708860759493671%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAYAAABYBvyLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfklEQVQI1z2Kyw6CMBRE+f+vkoSNOyEtFTHBSHwgkV5uC9tjJdHFJGfOTDapIDrjU5ZlIcSIBsXPsnFMCSGwruufvz9V3frPi3hi8ln5aLnJQHU/0QwdbuwZ9M1TRvZXy/nV03cX8nyHdY66thRFwaGsaI4OYwy1NWlrmLznA9RBlCoDkpGsAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Certificat SSL HTTPS sur Integral Service&quot;
        title=&quot;&quot;
        src=&quot;/static/https-integral-service-a568461cf2ba95791f3e3847a1038103-eac32.png&quot;
        srcset=&quot;/static/https-integral-service-a568461cf2ba95791f3e3847a1038103-decbe.png 240w,
/static/https-integral-service-a568461cf2ba95791f3e3847a1038103-eac32.png 316w&quot;
        sizes=&quot;(max-width: 316px) 100vw, 316px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;h2 id=&quot;google-le-fer-de-lance-du-https&quot;&gt;&lt;a href=&quot;#google-le-fer-de-lance-du-https&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Google, le fer de lance du HTTPS&lt;/h2&gt;
&lt;p&gt;Google avait annoncé dès mi-2016 une volonté forte de passer l&apos;ensemble des sites internet de la planète sous HTTPS. Pour se faire ils ont commencé par annoncer une évolution de chrome :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« à partir de janvier 2017, Chrome 56 indiquera dans la barre d’adresse un message signalant un danger pour certains sites web non accessibles en HTTPS. »&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A travers cette évolution, qui peut paraître mineure, de Google Chrome, Google lance un pavé dans la mare. En effet Google Chrome est un des navigateurs les plus utilisés au monde, comme le montrent les dernières statistiques de juin 2017, et cette prise de position impose une migration rapide de nombreux sites internet.&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/part-marche-navigateur-juin-2017-6dc36a7a658bccca7495afcea68e8386-33494.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 600px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 71.33333333333334%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsSAAALEgHS3X78AAACPklEQVQ4y6WTyW4TQRCG58Z7cIU34AV4CS4cEHALEsgi8gmxKNyI4MoBgWQhJYJEVoIiEyQbLzJe4tgK43XGs2Q8++IZzxD0M922wc4ikDj86q6urq9qeqoYy7LQ7/cxGAygKAp4nqe2KIro9XqQJInaHMfRM7IniqLoXDGmadKguWRZplBBECiAaDgc0oTEN79D4ohs24amaXTv+z6Y0xkEScHxyEQYhugKKgotHlEYIZgEqDda+M52qH1hhYsGyVwsFnH7zl2YlodHGy1cXtlFGPvEOFEymcTjJ09j+AS6KsF1zDNwxvF81FgZ3jigJedLVaR39hAEkxnwE7049gPkijVU6kdx9RFOMlfxo7l6tsK+4uH+2yFkw6cH5HI4y7oInPrCeA1nwCs4aT78O3BRp4F/wP8A5EcuNN1YepP/Au7UdCTecZA1Gyw3WgJyso42f0x/DvnsRaAxLMCzpPOBD2Jguqpj7aO4BLzxqoTrz3JY26wjle0sABP4uXUJUfsFtNIqQocHo5g+Xr8vo9qz8DwtonIkYnu/TivZyLaxsr6H9Q9lJFIV3Es18DLToT57/xYm3Tfofr6JMbeJye41hBYLhvRUvpmF5frYqnCwJQ7awVcaxKkyenwTKttCt1FGYThCX7do9cV2E74jxTED6HHPKrntuO3G08Ym/Ufm2DAMuhKbnAdBAFVVqXRdX/LN48jYkbjfb0img2VZ6nAcB67r0nXacxePmOd5ODxsgBdEZLIFfMmX8O2giV9c//L4QEHMbQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Part de marché des navigateur en Juin 2017 dabns le monde&quot;
        title=&quot;&quot;
        src=&quot;/static/part-marche-navigateur-juin-2017-6dc36a7a658bccca7495afcea68e8386-33494.png&quot;
        srcset=&quot;/static/part-marche-navigateur-juin-2017-6dc36a7a658bccca7495afcea68e8386-22f52.png 240w,
/static/part-marche-navigateur-juin-2017-6dc36a7a658bccca7495afcea68e8386-d8b63.png 480w,
/static/part-marche-navigateur-juin-2017-6dc36a7a658bccca7495afcea68e8386-33494.png 600w&quot;
        sizes=&quot;(max-width: 600px) 100vw, 600px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;Pour conforter sa position avec les certificats SSL, Google avait annoncé dès 2014 :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Nous commençons à utiliser le protocole HTTPS en tant que facteur de positionnement. Pour l’instant, cet indicateur a très peu de poids et ce afin de laisser le temps aux webmasters de passer au protocole HTTPS. »&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Puis en 2015 ils surenchérissent :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Gmail, la recherche Google et YouTube bénéficient de connexions sécurisées depuis longtemps. Nous avons également commencé à légèrement améliorer le classement des URL HTTPS dans les résultats de recherche l’an dernier. La navigation sur le Web devrait être une expérience privée entre l’utilisateur et le site Web, sans que cela ne donne lieu à des actes d’espionnage, à des attaques dites « de l’homme du milieu » ni à des modifications de données. C’est pourquoi nous appuyons fortement la généralisation du HTTPS. »&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La situation a un peu évoluée depuis, &lt;strong&gt;puisqu&apos;en matière de référencement il est fortement conséillé de mettre en place un certificat HTTPS&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;aucune-obligation&quot;&gt;&lt;a href=&quot;#aucune-obligation&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Aucune obligation&lt;/h2&gt;
&lt;p&gt;Il n&apos;y a aucune obligatoire, pour le moment, de sécuriser votre site internet avec le certificat HTTPS. Pour le moment, cela ne se traduira que par un affichage indiquant que la connexion n&apos;est pas sécurisée.&lt;/p&gt;
&lt;p&gt;Nous tenons à rappeler que &lt;strong&gt;la mise en place d&apos;un certificat de sécurité est vivement recommandée pour les sites collectant des données sensibles&lt;/strong&gt; (Mots de passe, paiement en ligne, ...).&lt;/p&gt;
&lt;h2 id=&quot;google-veut-rendre-le-https-obligatoire&quot;&gt;&lt;a href=&quot;#google-veut-rendre-le-https-obligatoire&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Google veut rendre le HTTPS obligatoire&lt;/h2&gt;
&lt;p&gt;C&apos;est récemment que les équipes de Google Chrome ont &lt;a href=&quot;https://blog.chromium.org/2017/04/next-steps-toward-more-connection.html&quot;&gt;annoncées&lt;/a&gt; une nouvelle étape dans la sécurisation du Web. Dès Octobre 2017, Google Chrome traitera les sites qui possèdent des formulaires de saisie de données utilisateur non sécurisés par un certificat SSL différemment.&lt;/p&gt;
&lt;p&gt;Dès lors que vous vous rendrez sur une page qui possède un formulaire de saisie non sécurisé et que vous souhaiterez remplir, le navigateur fera précédé l&apos;URL du site de la mention &apos;Non sécurisé&apos;, comme le montre l&apos;animation ci-dessous :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/http-search-e046f0f09e1d501216cb5be6e297f0da.gif&quot; alt=&quot;HTTPS Search&quot;&gt;&lt;/p&gt;
&lt;p&gt;Ils annoncent même vouloir aller plus loin et afficher ce fameux label &quot;non sécurisé&quot; sur toutes les pages non accessibles en HTTPS.&lt;/p&gt;
&lt;h2 id=&quot;en-conclusion&quot;&gt;&lt;a href=&quot;#en-conclusion&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;En conclusion&lt;/h2&gt;
&lt;p&gt;Il est évident que les grands acteurs du Web tendent à faire pencher les sites web vers l&apos;utilisation du HTTPS. Même si aujourd&apos;hui, rien ne rend obligatoire la mise en place de certificats SSL, elle devient une bonne pratique.&lt;/p&gt;
&lt;p&gt;De nombreux hébergeurs (ainsi qu&apos;Integral Service) ont déjà mis en place des solutions (gratuites ou payantes) pour pouvoir bénéficier facilement de certificats SSL.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vous avez des questions ?&lt;/strong&gt; N&apos;hésitez pas à nous contacter à travers notre &lt;a href=&quot;/contact&quot;&gt;page de contact&lt;/a&gt; ou directement à partir de notre &lt;a href=&quot;https://www.facebook.com/integralweb69&quot;&gt;page Facebook&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Les nouveautés de Symfony 4]]></title><description><![CDATA[Des changements pour Symfony Durant la Keynote de Fabien Potencier au Symfony Live 2017 de nombreuses annonces ont été révélées. Découvrez…]]></description><link>https://www.integral-service.fr/les-nouveautes-de-symfony-4</link><guid isPermaLink="false">https://www.integral-service.fr/les-nouveautes-de-symfony-4</guid><category><![CDATA[integral-service]]></category><category><![CDATA[Symfony]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;h2 id=&quot;des-changements-pour-symfony&quot;&gt;&lt;a href=&quot;#des-changements-pour-symfony&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Des changements pour Symfony&lt;/h2&gt;
&lt;p&gt;Durant la Keynote de Fabien Potencier au Symfony Live 2017 de nombreuses annonces ont été révélées.&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/symfony-6dac1055b87a46b3ad81581c5c4ecfd1-b3d7e.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 624px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 25%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA8ElEQVQY03VPwapEYBj9rWUtDzAvYKewMc8xnsAjKBtkIc3KRk0aNexZKOztSJSykIxk6042NPN1F3dxa87i1Hc65zsdNAzD+XzGcVwQhK7r3l+w7/txHP9EBJnT6cRxnCiKLMuC5HleXdc/vxjHcVmWeZ5VVX0+n3C+Xq++79d13bYNkSRpmqZhGBRFYRgGDUVRuK4LL4Ig0HVdURTbtsFzvV7v97ssy77va5oGjHieZxhGkiSEEE3T0FxV1ePxcBynbdssy5IkSdMUOAzD2+0WRRHoeZ5bloVg5+VyIQgCkk3T/O2J4/j9HWVZTtP0AYdB1aDL0xfjAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Symfony&quot;
        title=&quot;&quot;
        src=&quot;/static/symfony-6dac1055b87a46b3ad81581c5c4ecfd1-b3d7e.png&quot;
        srcset=&quot;/static/symfony-6dac1055b87a46b3ad81581c5c4ecfd1-fa74a.png 240w,
/static/symfony-6dac1055b87a46b3ad81581c5c4ecfd1-315f6.png 480w,
/static/symfony-6dac1055b87a46b3ad81581c5c4ecfd1-b3d7e.png 624w&quot;
        sizes=&quot;(max-width: 624px) 100vw, 624px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Découvrez notre dernier article sur l&apos;ensemble des nouveautés introduites par symfony 4 &lt;a href=&quot;/symfony-4-un-etat-des-lieux-avant-la-sortie&quot;&gt;ici&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;le-processus-de-publication-des-versions-de-symfony-change&quot;&gt;&lt;a href=&quot;#le-processus-de-publication-des-versions-de-symfony-change&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Le processus de publication des versions de Symfony change&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;SensioLabs&lt;/strong&gt;, la société créatrice de Symfony, à souhaité mettre en avant un nouveau rythme dans les mises à jours. Ainsi il sera désormais prévu 1 version majeure tous les 2 ans et une version mineure tous les 6 mois.&lt;/p&gt;
&lt;p&gt;C&apos;est pourquoi &lt;strong&gt;Symfony 4&lt;/strong&gt; est annoncé pour &lt;strong&gt;Novembre 2017&lt;/strong&gt; alors qu&apos;il est &lt;a href=&quot;https://github.com/symfony/skeleton&quot;&gt;déjà disponible en Bêta&lt;/a&gt; depuis le mois d&apos;Avri 2017.  &lt;/p&gt;
&lt;h3 id=&quot;les-distributions-symfony-cest-fini&quot;&gt;&lt;a href=&quot;#les-distributions-symfony-cest-fini&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Les distributions Symfony, c&apos;est fini&lt;/h3&gt;
&lt;p&gt;C&apos;est désormais officiel, Symfony 4 ne proposera plus diverses distributions pré-conditionnées comme l&apos;édition CMF, ou la REST Edition. Désormais une seule distribution sera diponible, la standard.&lt;/p&gt;
&lt;h3 id=&quot;symfony-4-des-changements-pour-les-développeurs&quot;&gt;&lt;a href=&quot;#symfony-4-des-changements-pour-les-d%C3%A9veloppeurs&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Symfony 4, des changements pour les développeurs&lt;/h3&gt;
&lt;p&gt;Comme l&apos;avait expliqué &lt;strong&gt;Fabien Potencier&lt;/strong&gt; dans son &lt;a href=&quot;https://medium.com/@fabpot/fabien-potencier-4574622d6a7e&quot;&gt;1er billet&lt;/a&gt; à propos de Symfony 4, la &lt;strong&gt;structure du framework&lt;/strong&gt; a besoin de changement. &lt;/p&gt;
&lt;p&gt;Premièrement l&apos;installation change drastiquement. Désormais un seul fichier &lt;strong&gt;composer.json&lt;/strong&gt; sera disponible afin d&apos;installer le framework. Ce fichier est disponible dans le &lt;a href=&quot;https://github.com/symfony/skeleton&quot;&gt;skeleton&lt;/a&gt; de Symfony. Ce fichier décrit l&apos;ensemble des bundles nécessaires au fonctionnement du coeur de Symfony.&lt;/p&gt;
&lt;p&gt;La bonne nouvelle, c&apos;est que désormais les développeurs web pourrons installer eux-même les bundles strictement nécessaire à leur besoin. Ainsi Symfony 4 en standard sera bien plus léger que ses prédecesseurs, mais tout sera à installer manuellement!&lt;/p&gt;
&lt;h2 id=&quot;les-recettes-symfony-4&quot;&gt;&lt;a href=&quot;#les-recettes-symfony-4&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Les recettes Symfony 4&lt;/h2&gt;
&lt;p&gt;Comme on l&apos;a vu précédemment, l&apos;installation de Symfony 4 à changé. Cependant pour aider les développeurs à la compréhension de ce nouveau système et dans leurs quotidien, un nouveau système à vu le jour: les &lt;strong&gt;Recipe&lt;/strong&gt; (Recettes).&lt;/p&gt;
&lt;p&gt;A partir de la version 3.4 ou de la version 4 de Symfony, ce nouveau système sera intégré. Ainsi les dépendances des Bundles seront gérées directement par les recettes.&lt;/p&gt;
&lt;h2 id=&quot;une-démo-pour-la-route-&quot;&gt;&lt;a href=&quot;#une-d%C3%A9mo-pour-la-route-&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Une démo pour la route !&lt;/h2&gt;
&lt;p&gt;Fabien Potencier nous à mis à disposition une vidéo de démonstration de Symfony 4 dans son &lt;a href=&quot;https://medium.com/@fabpot/symfony-4-a-quick-demo-da7d32be323&quot;&gt;dernier billet&lt;/a&gt;:&lt;/p&gt;
&lt;div&gt;
          &lt;div
            class=&quot;gatsby-resp-iframe-wrapper&quot;
            style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden;&quot;
          &gt;
            &lt;iframe src=&quot;https://www.youtube.com/embed/o9N1nOYfAl4&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
          &quot;&gt;&lt;/iframe&gt;
          &lt;/div&gt;
          &lt;/div&gt;
&lt;h2 id=&quot;pour-aller-plus-loin&quot;&gt;&lt;a href=&quot;#pour-aller-plus-loin&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pour aller plus loin&lt;/h2&gt;
&lt;p&gt;Nous vous poposons quelques liens pour aller plus loin dans vos recherches ou vos expérimentations Web autour de Symfony 4:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://symfony.com/blog/symfony-4-a-new-way-to-develop-applications&quot;&gt;Symfony 4, a new way to develop applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dunglas.fr/2017/06/dive-into-symfony-4/&quot;&gt;Dive Into Symfony 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://symfony.com/blog/symfony-4-end-of-hhvm-support&quot;&gt;End of HHVM Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@fabpot/symfony-4-directory-structure-updates-d8f4686546d5&quot;&gt;directory structure update&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Un nouveau site]]></title><description><![CDATA[C'est l'histoire du cordonnier... Notre ancien site, qui nous a rendu bien des services, a soufflé ses 3 bougies en milieu d'année 2017.…]]></description><link>https://www.integral-service.fr/un-nouveau-site</link><guid isPermaLink="false">https://www.integral-service.fr/un-nouveau-site</guid><category><![CDATA[integral-service]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;h2 id=&quot;cest-lhistoire-du-cordonnier&quot;&gt;&lt;a href=&quot;#cest-lhistoire-du-cordonnier&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;C&apos;est l&apos;histoire du cordonnier...&lt;/h2&gt;
&lt;p&gt;Notre ancien site, qui nous a rendu bien des services, a soufflé ses 3 bougies en milieu d&apos;année 2017. Après quelques échanges en interne nous avons décidé d&apos;arrêter de répondre à l&apos;adage &quot;Les cordonniers sont les plus mal chaussés&quot; et de créer de toute pièce notre nouvelle vitrine web.&lt;/p&gt;
&lt;p&gt;Le site se devait de répondre aux exigences qu&apos;on avait formulé:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Elegant&lt;/li&gt;
&lt;li&gt;Rapide, très rapide&lt;/li&gt;
&lt;li&gt;Utiliser des technologies récentes&lt;/li&gt;
&lt;li&gt;Le moins de maintenance possible&lt;/li&gt;
&lt;li&gt;nous amuser pendant sa réalisation !&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;elegant&quot;&gt;&lt;a href=&quot;#elegant&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Elegant&lt;/h2&gt;
&lt;p&gt;Tous les gouts sont dans la nature, cependant on a essayé de réutiliser un maximum la &lt;strong&gt;veille graphique&lt;/strong&gt; que l&apos;on fait au quotidien grâce à &lt;a href=&quot;https://twitter.com/integralWeb69&quot;&gt;notre compte Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;rapide--récent&quot;&gt;&lt;a href=&quot;#rapide--r%C3%A9cent&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Rapide &amp;#x26; récent&lt;/h2&gt;
&lt;p&gt;La rapidité du site était une de nos priorités. Rien de plus énervant qu&apos;un site qui prend plusieurs secondes pour s&apos;afficher que ce soit sur PC ou Smartphone. C&apos;est pourquoi nous avons mis en place les dernières techniques d&apos;optimisation pour vous proposer un site fluide !&lt;/p&gt;
&lt;p&gt;Pour se faire On a utilisé des &lt;strong&gt;technologies web super cool&lt;/strong&gt; comme:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://facebook.github.io/react/&quot;&gt;React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webpack.github.io/&quot;&gt;Webpack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yarnpkg.com/en/&quot;&gt;Yarn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;HTTP/2&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cet ensemble d&apos;outils nous a permis de réaliser une structure technique solide qui s&apos;adapte en fonction de votre bande passant et de votre navigateur.&lt;/p&gt;
&lt;h2 id=&quot;la-maintenance&quot;&gt;&lt;a href=&quot;#la-maintenance&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;La maintenance&lt;/h2&gt;
&lt;p&gt;On souhaitait avoir un site le plus autonome possible. Nous avons donc utilisé le générateur de site statique &lt;a href=&quot;https://github.com/gatsbyjs/gatsby&quot;&gt;Gatsby&lt;/a&gt; pour générer 100% de notre site au format HTML / CSS / Javascript. Avec ce type de &lt;a href=&quot;/site-internet&quot;&gt;site internet&lt;/a&gt;, plus besoin de mises à jours de sécurité ou autre! On peut le faire quant on le souhaite !&lt;/p&gt;
&lt;p&gt;On est tous très content du résultat et on espère qu&apos;il vous plaira aussi !&lt;/p&gt;
&lt;h2 id=&quot;a-venir&quot;&gt;&lt;a href=&quot;#a-venir&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;A venir&lt;/h2&gt;
&lt;p&gt;Un nouvel effort va être fait pour que l&apos;on partage toujours plus de contenu sur le Blog !&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Integral System votre expert en PC industriel]]></title><description><![CDATA[Du nouveau ! Integral System  est une société référante dans le domaine des PC industriel et de l'automation. Nous avons entrepris, il y a…]]></description><link>https://www.integral-service.fr/integral-system-votre-expert-en-pc-industriel</link><guid isPermaLink="false">https://www.integral-service.fr/integral-system-votre-expert-en-pc-industriel</guid><category><![CDATA[integral-service]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;h2 id=&quot;du-nouveau-&quot;&gt;&lt;a href=&quot;#du-nouveau-&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Du nouveau !&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Integral System&lt;/strong&gt; est une société référante dans le domaine des PC industriel et de l&apos;automation. Nous avons entrepris, il y a quelques semaines, de remettre au goût du jour l&apos;ensemble des sites du groupe. &lt;/p&gt;
&lt;p&gt;L&apos;expertise de plusieurs dizaines d&apos;années d&apos;Integral System dans le &lt;strong&gt;matériel informatique industriel&lt;/strong&gt; n&apos;est plus à prouvé et ils proposent donc logiquement un grand nombre de PC. &lt;/p&gt;
&lt;p&gt;Après une étude en profondeur du système d&apos;information d&apos;Integral System, de l&apos;architecture des produits et de la base tarif, nous avons mis à profis notre expertise Symfony et Sylius pour proposer un nouveau site E-Commerce spécialement adapté à la distribution de PC industriels, PC Fanless et autres matériels informatique industriel.&lt;/p&gt;
&lt;p&gt;
  &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/integral-home-compressor-3453cd71e8f1b01bc2ad08a6bc5ba6f1-3c0e0.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
  
  &lt;span
    class=&quot;gatsby-resp-image-wrapper&quot;
    style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 960px; margin-left: auto; margin-right: auto;&quot;
  &gt;
    &lt;span
      class=&quot;gatsby-resp-image-background-image&quot;
      style=&quot;padding-bottom: 47.719298245614034%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAACUklEQVQoz2O4te/ooTMXNu86sGn+ytePn7579+7r168/kcCHDx8+fvz4CRm8eff8/uMvHz8xRFW3pzb3J9Z1hWZVpjb0xNZ2Jjb0xNd1xdd3p7VOSGjoTmnuAyqIqe3MaJ2YUN+d0gTm1nQANTLkdEwu6Z9Z0D0NyCibMAtCFvfNKOyZXjFxdn7X1OK+mUCU1zW1YtKc/O6puZ1TgAioDIgY/v///+37jyev3jx68erFm/fP37x78vL1s9dvH7549erdByD70YvXD5+/fP/p89NXb4Cyj1++/vbjx38wAGn+/fvPh89fPn399uX796/ff3z59h2IgCJA8uOXr5+/ff/89duPn78+ffkKVANk//7zB6rZLnuStk+eclS9SvpE3Zxpwb1bfTs2OVYvs0vt0LCNlNNxVXBJltN1k3dNUrCNUHCIMYiptymerZk2wTJ7AoNyULWIe6FY5iyJjOk6FUv955x0m3zYonOPf+/uooXHo1qWBTcuNwopEw6vZTUJYzMO8a2f2bJsn3P5gq0nrjJoRzQox/fY1q/t3npp2anH7lOPOPbvN+7cEzdpV/WSo3mT10/ae799+71Zh+62bb+cv/T41usfdt76sv/Whz///jGoJfZGTdg5+9BDoGj/3vtBM4+6Tdyn37BeNqAqds7J5Pn72/fcnXHy6eTjT+edezXnxKNtN95uufJi09mHt55/YNBK6A/t3hk/9XDc5N3mFctUUiZIRzSJBVRI+ZZJ+FUo5cyUSuwRT54gljtPo2yRRvFc1cK50ukTZRO7tLP7AIrfeKI7C+P1AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
    &gt;
      &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot;
        alt=&quot;Nouveau site d&apos;integral System&quot;
        title=&quot;&quot;
        src=&quot;/static/integral-home-compressor-3453cd71e8f1b01bc2ad08a6bc5ba6f1-3bb8f.png&quot;
        srcset=&quot;/static/integral-home-compressor-3453cd71e8f1b01bc2ad08a6bc5ba6f1-3ae1d.png 240w,
/static/integral-home-compressor-3453cd71e8f1b01bc2ad08a6bc5ba6f1-c332d.png 480w,
/static/integral-home-compressor-3453cd71e8f1b01bc2ad08a6bc5ba6f1-3bb8f.png 960w,
/static/integral-home-compressor-3453cd71e8f1b01bc2ad08a6bc5ba6f1-3c0e0.png 1140w&quot;
        sizes=&quot;(max-width: 960px) 100vw, 960px&quot;
      /&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;On peut retrouver plus de 150 catégories de matériel allant du PC Fanless industriel, en passant par les Panel PC, les cartes mère industrielle et les applications de supervision.&lt;/p&gt;
&lt;p&gt;N&apos;hésitez pas aller faire un tour sur ce &lt;a href=&quot;https://www.integral-system.fr&quot;&gt;nouveau site&lt;/a&gt; !&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Blanc Cambouis, les meubles design]]></title><description><![CDATA[L'innovation au coeur du E-Commerce Blanc Cambouis est une marque de meuble design Français pour laquelle nous avons réalisée un  site E…]]></description><link>https://www.integral-service.fr/blanc-cambouis-les-meubles-design</link><guid isPermaLink="false">https://www.integral-service.fr/blanc-cambouis-les-meubles-design</guid><category><![CDATA[integral-service]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;h2 id=&quot;linnovation-au-coeur-du-e-commerce&quot;&gt;&lt;a href=&quot;#linnovation-au-coeur-du-e-commerce&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;L&apos;innovation au coeur du E-Commerce&lt;/h2&gt;
&lt;p&gt;Blanc Cambouis est une marque de meuble design Français pour laquelle nous avons réalisée un &lt;a href=&quot;/e-commerce&quot;&gt;site E-Commerce&lt;/a&gt; qui intègre d&apos;un configurateur dynamique connecté à un moteur de rendu 3D. Ce moteur 3D vous permet de personnaliser l&apos;ensemble de la gamme de meuble de Blanc Cambouis à tarvers plus de 10 000 combinaisons par meuble.&lt;/p&gt;
&lt;p&gt;Nous avons rencontré &lt;a href=&quot;https://www.jec.fr&quot;&gt;JEC&lt;/a&gt; et Blanc Cambouis qui nous on expliqué que leurs objectif était d&apos;obtenir un site E-Commerce qui mette en avant les créations de Lilian le designer, de manière esthétique et personnalisables.&lt;/p&gt;
&lt;p&gt;C&apos;est pourquoi nous avons logiquement proposé l&apos;utilisation de la technologie WebGL afin de créer un moteur de rendu 3D efficace, fonctionnel et fluide (même sur smartphone !).&lt;/p&gt;
&lt;p&gt;Nous avons choisi d&apos;utiliser Symfony 3 et Sylius afin de réaliser cette plateforme E-Commerce pour des raisons de performance, et la capacité d&apos;évolution du framework Symfony.&lt;/p&gt;
&lt;p&gt;Vous pouvez dès à présent aller découvrir &lt;a href=&quot;https://www.blanccambouis.fr&quot;&gt;ce site haut en forme&lt;/a&gt; et en couleurs !&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Smokitten, le jeu vidéo pour arrêter de fumer]]></title><description><![CDATA[Un projet de nos amis Dowino Smokitten est un nouveau projet réalisé par la société  Dowino  (nos voisins du  Pôle Pixel ) spécialisée dans…]]></description><link>https://www.integral-service.fr/smokitten-le-jeu-video-pour-arreter-de-fumer</link><guid isPermaLink="false">https://www.integral-service.fr/smokitten-le-jeu-video-pour-arreter-de-fumer</guid><category><![CDATA[actualités]]></category><category><![CDATA[partenaires]]></category><category><![CDATA[serious game]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;h2 id=&quot;un-projet-de-nos-amis-dowino&quot;&gt;&lt;a href=&quot;#un-projet-de-nos-amis-dowino&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Un projet de nos amis Dowino&lt;/h2&gt;
&lt;p&gt;Smokitten est un nouveau projet réalisé par la société &lt;a href=&quot;http://www.dowino.com&quot;&gt;Dowino&lt;/a&gt; (nos voisins du &lt;a href=&quot;integral-service-sinstalle-au-sein-du-pole-pixel&quot;&gt;Pôle Pixel&lt;/a&gt;) spécialisée dans le serious game qui a pour objectif d&apos;aider à arrêter de fumer (Ou ne jamais commencer !).&lt;/p&gt;
&lt;p&gt;C&apos;est dans une optique de sensibilisation et surtout d&apos;aide au quotidien que les équipes ont déjà commencée à travailler d&apos;arrache pied sur ce nouveau projet de jeu vidéo.&lt;/p&gt;
&lt;h2 id=&quot;un-nouveau-défi&quot;&gt;&lt;a href=&quot;#un-nouveau-d%C3%A9fi&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Un nouveau défi&lt;/h2&gt;
&lt;p&gt;Après avoir réalisé un carton avec &lt;strong&gt;A Blind Legend&lt;/strong&gt; l&apos;équipe se lance dans un nouveau défi: créer un jeu vidéo engageant avec lequel le joueur prend plaisir à jouer avec sa famille et ses amis. Tout le monde peut vous aider à arrêter de fumer !&lt;/p&gt;
&lt;h2 id=&quot;fortis-dextrae-humo-limina-tempus-singultibus-illa&quot;&gt;&lt;a href=&quot;#fortis-dextrae-humo-limina-tempus-singultibus-illa&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Fortis dextrae humo limina Tempus singultibus illa&lt;/h2&gt;
&lt;p&gt;Nous les avons accompagné pour la réalisation du site internet de &lt;a href=&quot;https://www.smokitten.com&quot;&gt;Smokitten&lt;/a&gt; et sommes fiers de vous présenter ce nouveau projet !&lt;/p&gt;
&lt;p&gt;N&apos;hésitez pas à visiter Smokitten.com pour suivre cette nouvelle aventure !&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Integral Service s'installe au sein du Pôle Pixel]]></title><description><![CDATA[Le Pôle Pixel Le pôle Pixel, dédié aux domaines de l'image et du son, regroupe aujourd'hui plus de 100 entreprises dans environ 16 000m² d…]]></description><link>https://www.integral-service.fr/integral-service-sinstalle-au-sein-du-pole-pixel</link><guid isPermaLink="false">https://www.integral-service.fr/integral-service-sinstalle-au-sein-du-pole-pixel</guid><category><![CDATA[integral-service]]></category><dc:creator><![CDATA[Integral Service]]></dc:creator><pubDate>Invalid Date</pubDate><content:encoded>&lt;h2 id=&quot;le-pôle-pixel&quot;&gt;&lt;a href=&quot;#le-p%C3%B4le-pixel&quot; aria-hidden=&quot;true&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Le Pôle Pixel&lt;/h2&gt;
&lt;p&gt;Le pôle Pixel, dédié aux domaines de l&apos;image et du son, regroupe aujourd&apos;hui plus de 100 entreprises dans environ 16 000m² d&apos;espaces. Ce groupement d&apos;entreprises villeurbannaises encadre les studios de cinéma Lumière qui ont accueilli de nombreux tournages de cinema de renom.&lt;/p&gt;

  &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/polepixel-ea13bf58ef64b6d63cddc22f26e28a03-fca36.jpg&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
  
  &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; z-index: 1; padding-top: 2rem; padding-bottom: 2rem;; max-width: 960px; margin-left: auto; margin-right: auto;&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 66.40350877192982%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAgX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAP/aAAwDAQACEAMQAAABZuO9FnKC/8QAGhAAAgMBAQAAAAAAAAAAAAAAAAECAxESMf/aAAgBAQABBQJ2RIJqHaHYblb9/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oACAEDAQE/AZGP/8QAFxEBAAMAAAAAAAAAAAAAAAAAAAECEv/aAAgBAgEBPwGbNv/EABoQAAICAwAAAAAAAAAAAAAAAAARAVECEDH/2gAIAQEABj8CsfXpIxi4JP/EABsQAAICAwEAAAAAAAAAAAAAAAABETEhQVGR/9oACAEBAAE/IUK8EpzYX6ge0+HSSQHVU52f/9oADAMBAAIAAwAAABCo3//EABcRAQADAAAAAAAAAAAAAAAAAAABETH/2gAIAQMBAT8QhxV//8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAx/9oACAECAQE/EE2Vf//EABwQAQEAAwADAQAAAAAAAAAAAAERACExUWGh8f/aAAgBAQABPxAXtb1gAbNfoh5wVG0o3CVFitc/MXLK1nMEbWtrfzP/2Q==&amp;apos;); background-size: cover; display: block;&quot;&gt;
      &lt;img class=&quot;gatsby-resp-image-image&quot; style=&quot;width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;&quot; alt=&quot;some text&quot; title=&quot;some text&quot; src=&quot;/static/polepixel-ea13bf58ef64b6d63cddc22f26e28a03-38cdd.jpg&quot; srcset=&quot;/static/polepixel-ea13bf58ef64b6d63cddc22f26e28a03-532f0.jpg 240w,
/static/polepixel-ea13bf58ef64b6d63cddc22f26e28a03-e7119.jpg 480w,
/static/polepixel-ea13bf58ef64b6d63cddc22f26e28a03-38cdd.jpg 960w,
/static/polepixel-ea13bf58ef64b6d63cddc22f26e28a03-fca36.jpg 1140w&quot; sizes=&quot;(max-width: 960px) 100vw, 960px&quot;&gt;
    &lt;/span&gt;
  &lt;/span&gt;
  
  &lt;/a&gt;
    
&lt;p&gt;Cette concentration de créativité et les possibilités de synergie nous ont finalement décidé à emménager dans ces nouveaux locaux.&lt;/p&gt;
&lt;p&gt;C&apos;est avec plaisir que nous vous fournissons donc notre nouvelle adresse ci-dessou:
Notre nouvelle adresse:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Integral Service&lt;/strong&gt;
36, Rue Emile Decorps
69100 Villeurbanne, France&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;+33 (0)4 37 69 72 09&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item></channel></rss>