{"id":544,"date":"2015-10-08T11:18:20","date_gmt":"2015-10-08T10:18:20","guid":{"rendered":"http:\/\/louis.hatier.me\/blog\/?p=544"},"modified":"2018-08-18T15:38:03","modified_gmt":"2018-08-18T14:38:03","slug":"creer-une-extension-twig","status":"publish","type":"post","link":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/","title":{"rendered":"Cr\u00e9er une extension Twig"},"content":{"rendered":"<p><a href=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg\" data-rel=\"lightbox-gallery-7OqTnetO\" data-rl_title=\"\" data-rl_caption=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-355 size-full\" title=\"\" src=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg\" alt=\"Logo Twig\" width=\"83\" height=\"101\" \/><\/a>Il peut arriver d\u2019avoir besoin d\u2019une fonctionnalit\u00e9 qui n\u2019est pas pr\u00e9vu par le syst\u00e8me de template Twig.<br \/>\nHeureusement, cr\u00e9er une <strong>extension <a href=\"http:\/\/louis.hatier.me\/blog\/twig-introduction-au-systeme-template-symfony\/\">Twig<\/a><\/strong> au sein d\u2019un projet Symfony2 est tr\u00e8s simple.<br \/>\nDans l\u2019exemple ci-dessous, nous allons cr\u00e9er une extension qui nous renverra la classe d\u2019un objet.<\/p>\n<p>Tout d\u2019abord il faut cr\u00e9er l\u2019extension, par exemple dans le dossier <code>AppBundle\/Twig\/<\/code><\/p>\n<p><!--more--><\/p>\n<pre><code class=\"php\">namespace AppBundle\\Twig;\r\n\r\nclass ClassExtension extends \\Twig_Extension\r\n{\r\n    \/**\r\n     * @return array\r\n     *\/\r\n    public function getFunctions()\r\n    {\r\n        return array(\r\n            'class' =&gt; new \\Twig_SimpleFunction('class', array($this, 'getClass'))\r\n        );\r\n    }\r\n\r\n    \/**\r\n     * @param object $object\r\n     * @return string\r\n     *\/\r\n    public function getClass($object)\r\n    {\r\n        return (new \\ReflectionClass($object))-&gt;getShortName();\r\n    }\r\n\r\n    \/**\r\n     * @return string\r\n     *\/\r\n    public function getName()\r\n    {\r\n        return 'class_twig_extension';\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>Il faut ensuite cr\u00e9er le service dans le fichier <code>app\/config\/services.yml<\/code><\/p>\n<pre><code class=\"yaml\">services:\r\n    class_twig_extension:\r\n        class: AppBundle\\Twig\\ClassExtension\r\n        public: false\r\n        tags:\r\n            - { name: twig.extension }\r\n<\/code><\/pre>\n<p>On peut d\u00e9sormais utiliser notre fonction \u00ab\u00a0class\u00a0\u00bb dans nos templates :<\/p>\n<pre><code class=\"html\">{% if class(monObjet) == 'Utilisateur' %}\r\n    {{ monObjet.nom }}\r\n{% endif %}\r\n<\/code><\/pre>\n<p>Il est possible de cr\u00e9er une extension \u00ab\u00a0filtre\u00a0\u00bb plut\u00f4t que \u00ab\u00a0fonction\u00a0\u00bb, pour pouvoir l\u2019utiliser de cette fa\u00e7on :<\/p>\n<pre><code class=\"html\">{{ monObjet|class }}\r\n<\/code><\/pre>\n<p>La documentation pr\u00e9sente sur le site de Symfony utilise ce cas : <a href=\"http:\/\/symfony.com\/doc\/current\/cookbook\/templating\/twig_extension.html\" target=\"_blank\" rel=\"noopener\">http:\/\/symfony.com\/doc\/current\/cookbook\/templating\/twig_extension.html<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img decoding=\"async\" src=\"https:\/\/static.hupso.com\/share\/buttons\/dot.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"pinterest\",\"email\",\"linkedin\");var hupso_counters_lang = \"en_US\";var hupso_image_folder_url = \"\";var hupso_url_c=\"\";var hupso_title_c=\"Cr%C3%A9er%20une%20extension%20Twig\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>Il peut arriver d\u2019avoir besoin d\u2019une fonctionnalit\u00e9 qui n\u2019est pas pr\u00e9vu par le syst\u00e8me de template Twig. Heureusement, cr\u00e9er une extension Twig au sein d\u2019un projet Symfony2 est tr\u00e8s simple. Dans l\u2019exemple ci-dessous, nous allons cr\u00e9er une extension qui nous renverra la classe d\u2019un objet. Tout d\u2019abord il faut cr\u00e9er l\u2019extension, par exemple dans le [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[57,18,47],"class_list":["post-544","post","type-post","status-publish","format-standard","hentry","category-php","tag-php","tag-symfony","tag-twig"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cr\u00e9er une extension Twig - Melting Poutre<\/title>\n<meta name=\"description\" content=\"Comment cr\u00e9er une extension Twig dans Symfony2\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cr\u00e9er une extension Twig - Melting Poutre\" \/>\n<meta property=\"og:description\" content=\"Comment cr\u00e9er une extension Twig dans Symfony2\" \/>\n<meta property=\"og:url\" content=\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/\" \/>\n<meta property=\"og:site_name\" content=\"Melting Poutre\" \/>\n<meta property=\"article:published_time\" content=\"2015-10-08T10:18:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-08-18T14:38:03+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg\" \/>\n<meta name=\"author\" content=\"Louis Hatier\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Louis Hatier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/\"},\"author\":{\"name\":\"Louis Hatier\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"headline\":\"Cr\u00e9er une extension Twig\",\"datePublished\":\"2015-10-08T10:18:20+00:00\",\"dateModified\":\"2018-08-18T14:38:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/\"},\"wordCount\":139,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"image\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg\",\"keywords\":[\"PHP\",\"Symfony\",\"Twig\"],\"articleSection\":[\"PHP\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/\",\"url\":\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/\",\"name\":\"Cr\u00e9er une extension Twig - Melting Poutre\",\"isPartOf\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg\",\"datePublished\":\"2015-10-08T10:18:20+00:00\",\"dateModified\":\"2018-08-18T14:38:03+00:00\",\"description\":\"Comment cr\u00e9er une extension Twig dans Symfony2\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#primaryimage\",\"url\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg\",\"contentUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#website\",\"url\":\"https:\/\/louis.hatier.me\/blog\/\",\"name\":\"Melting Poutre\",\"description\":\"Du web et d&#039;autres choses\",\"publisher\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/louis.hatier.me\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\",\"name\":\"Louis Hatier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g\",\"caption\":\"Louis Hatier\"},\"logo\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/louis.hatier.me\",\"https:\/\/www.linkedin.com\/in\/louishatier\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cr\u00e9er une extension Twig - Melting Poutre","description":"Comment cr\u00e9er une extension Twig dans Symfony2","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/","og_locale":"fr_FR","og_type":"article","og_title":"Cr\u00e9er une extension Twig - Melting Poutre","og_description":"Comment cr\u00e9er une extension Twig dans Symfony2","og_url":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/","og_site_name":"Melting Poutre","article_published_time":"2015-10-08T10:18:20+00:00","article_modified_time":"2018-08-18T14:38:03+00:00","og_image":[{"url":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg","type":"","width":"","height":""}],"author":"Louis Hatier","twitter_misc":{"\u00c9crit par":"Louis Hatier","Dur\u00e9e de lecture estim\u00e9e":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#article","isPartOf":{"@id":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/"},"author":{"name":"Louis Hatier","@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"headline":"Cr\u00e9er une extension Twig","datePublished":"2015-10-08T10:18:20+00:00","dateModified":"2018-08-18T14:38:03+00:00","mainEntityOfPage":{"@id":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/"},"wordCount":139,"commentCount":0,"publisher":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"image":{"@id":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#primaryimage"},"thumbnailUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg","keywords":["PHP","Symfony","Twig"],"articleSection":["PHP"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/","url":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/","name":"Cr\u00e9er une extension Twig - Melting Poutre","isPartOf":{"@id":"https:\/\/louis.hatier.me\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#primaryimage"},"image":{"@id":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#primaryimage"},"thumbnailUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg","datePublished":"2015-10-08T10:18:20+00:00","dateModified":"2018-08-18T14:38:03+00:00","description":"Comment cr\u00e9er une extension Twig dans Symfony2","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/louis.hatier.me\/blog\/creer-une-extension-twig\/#primaryimage","url":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg","contentUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2014\/02\/logo-twig.jpg"},{"@type":"WebSite","@id":"https:\/\/louis.hatier.me\/blog\/#website","url":"https:\/\/louis.hatier.me\/blog\/","name":"Melting Poutre","description":"Du web et d&#039;autres choses","publisher":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/louis.hatier.me\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11","name":"Louis Hatier","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g","caption":"Louis Hatier"},"logo":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/louis.hatier.me","https:\/\/www.linkedin.com\/in\/louishatier\/"]}]}},"_links":{"self":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/comments?post=544"}],"version-history":[{"count":11,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/544\/revisions"}],"predecessor-version":[{"id":679,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/544\/revisions\/679"}],"wp:attachment":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/media?parent=544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/categories?post=544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/tags?post=544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}