{"id":518,"date":"2015-08-13T18:37:12","date_gmt":"2015-08-13T17:37:12","guid":{"rendered":"http:\/\/louis.hatier.me\/blog\/?p=518"},"modified":"2018-08-18T15:39:28","modified_gmt":"2018-08-18T14:39:28","slug":"envoyer-les-exceptions-par-mail-avec-symfony2","status":"publish","type":"post","link":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/","title":{"rendered":"Envoyer les exceptions par mail avec Symfony2"},"content":{"rendered":"<p><a href=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.jpg\" data-rel=\"lightbox-gallery-axpATwXG\" data-rl_title=\"\" data-rl_caption=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-513 size-full\" title=\"\" src=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.jpg\" alt=\"Logo Symfony\" width=\"219\" height=\"80\" \/><\/a>Le framework Symfony2 permet de s\u2019abonner \u00e0 des \u00e9v\u00e9nements en cr\u00e9ant des listener, dans notre cas ce sera l\u2019\u00e9v\u00e9nement <code>kernel.exception<\/code>.<br \/>\nUne fois l\u2019exception captur\u00e9e, on pourra l\u2019enregistrer dans des fichiers de logs, l\u2019envoyer par mail etc.<br \/>\nVoici une mani\u00e8re de r\u00e9aliser un envoi de mail automatique lorsque une exception est lev\u00e9e.<\/p>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n<p>On commence par cr\u00e9er le service dans le fichier <code>app\/config\/services.yml<\/code><\/p>\n<pre><code class=\"yaml\">services:\r\n    app.exception_listener:\r\n        class: AppBundleEventListenerExceptionListener\r\n        calls:\r\n            - [setMailer, [\"@mailer\"]]\r\n            - [setTemplating, [\"@templating\"]]\r\n        tags:\r\n            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }\r\n<\/code><\/pre>\n<p>On renseigne la classe qui va g\u00e9rer l\u2019abonnement \u00e0 l\u2019\u00e9v\u00e9nement, et qu\u2019il va falloir cr\u00e9er (ExceptionListener), puis on initialise deux fonctions : <code>setMailer<\/code> et <code>setTemplating<\/code> avec en argument les services nativement existants <code>mailer<\/code> et <code>templating<\/code>.<br \/>\nCela nous permettra de les utiliser \u00e0 l\u2019int\u00e9rieur de notre classe.<\/p>\n<pre><code class=\"php\">namespace AppBundle\\EventListener;\r\n\r\nuse Symfony\\Component\\EventDispatcher\\EventSubscriberInterface;\r\nuse Symfony\\Component\\HttpKernel\\Event\\GetResponseForExceptionEvent;\r\nuse Symfony\\Bundle\\TwigBundle\\TwigEngine;\r\n\r\nclass ExceptionListener implements EventSubscriberInterface\r\n{\r\n    private $mailer;\r\n    private $templating;\r\n    private $dontCare = array(\r\n        'Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException',\r\n        'Symfony\\Component\\HttpKernel\\Exception\\AccessDeniedHttpException',\r\n    );\r\n\r\n    \/**\r\n     * @param GetResponseForExceptionEvent $event\r\n     * @return void\r\n     *\/\r\n    public function onKernelException(GetResponseForExceptionEvent $event)\r\n    {\r\n        \/\/ pas de mail d'erreur pour certaines exceptions\r\n        if (in_array(get_class($event-&gt;getException()), $this-&gt;dontCare)) {\r\n            return;\r\n        }\r\n\r\n        \/\/ contenu du mail\r\n        $body = $this-&gt;templating-&gt;render('mails\/error.html.twig', array(\r\n            'exception' =&gt; $event-&gt;getException(),\r\n        ));\r\n\r\n        $message = Swift_Message::newInstance()\r\n            -&gt;setFrom('user@domain.com', 'John Doe')\r\n            -&gt;setTo('user@domain.com')\r\n            -&gt;setSubject('[Mon appli] Erreur !')\r\n            -&gt;setBody($body, 'text\/html');\r\n\r\n        $this-&gt;mailer-&gt;send($message);\r\n    }\r\n\r\n    \/**\r\n     * @return array\r\n     *\/\r\n    public static function getSubscribedEvents()\r\n    {\r\n        return array(\r\n            'kernel.exception' =&gt; 'onKernelException'\r\n        );\r\n    }\r\n\r\n    \/**\r\n     * @param Swift_Mailer $mailer\r\n     * @return void\r\n     *\/\r\n    public function setMailer(\\Swift_Mailer $mailer)\r\n    {\r\n        $this-&gt;mailer = $mailer;\r\n    }\r\n\r\n    \/**\r\n     * @param TwigEngine $templating\r\n     * @return void\r\n     *\/\r\n    public function setTemplating(TwigEngine $templating)\r\n    {\r\n        $this-&gt;templating = $templating;\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>Le code est assez compr\u00e9hensible, le fonction <code>onKernelException<\/code> n\u2019enverra pas de mail si c\u2019est une erreur de type \u00ab\u00a0NotFoundHttpException\u00a0\u00bb ou \u00ab\u00a0AccessDeniedHttpException\u00a0\u00bb.<\/p>\n<p>Le contenu du mail est g\u00e9r\u00e9 dans le template <code>app\/Resources\/views\/mails\/error.html.twig<\/code>, voici un extrait :<\/p>\n<pre><code class=\"html\">&lt;h3&gt;Exception information :&lt;\/h3&gt;\r\n&lt;p&gt;\r\n   &lt;b&gt;Message : &lt;\/b&gt;{{ exception.getMessage() }} (code {{ exception.getCode() }})\r\n&lt;\/p&gt;\r\n\r\n&lt;ul&gt;\r\n   &lt;li&gt;&lt;strong&gt;Fichier : &lt;\/strong&gt;{{ exception.getFile() }}&lt;\/li&gt;\r\n   &lt;li&gt;&lt;strong&gt;Ligne : &lt;\/strong&gt;{{ exception.getLine() }}&lt;\/li&gt;\r\n   \u2026\r\n<\/code><\/pre>\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=\"Envoyer%20les%20exceptions%20par%20mail%20avec%20Symfony2\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>Le framework Symfony2 permet de s\u2019abonner \u00e0 des \u00e9v\u00e9nements en cr\u00e9ant des listener, dans notre cas ce sera l\u2019\u00e9v\u00e9nement kernel.exception. Une fois l\u2019exception captur\u00e9e, on pourra l\u2019enregistrer dans des fichiers de logs, l\u2019envoyer par mail etc. Voici une mani\u00e8re de r\u00e9aliser un envoi de mail automatique lorsque une exception est lev\u00e9e.<\/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],"class_list":["post-518","post","type-post","status-publish","format-standard","hentry","category-php","tag-php","tag-symfony"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Envoyer les exceptions par mail avec Symfony2 - Melting Poutre<\/title>\n<meta name=\"description\" content=\"Comment ajouter un listener \u00e0 l&#039;\u00e9v\u00e9nement exception de 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\/envoyer-les-exceptions-par-mail-avec-symfony2\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Envoyer les exceptions par mail avec Symfony2 - Melting Poutre\" \/>\n<meta property=\"og:description\" content=\"Comment ajouter un listener \u00e0 l&#039;\u00e9v\u00e9nement exception de Symfony2\" \/>\n<meta property=\"og:url\" content=\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/\" \/>\n<meta property=\"og:site_name\" content=\"Melting Poutre\" \/>\n<meta property=\"article:published_time\" content=\"2015-08-13T17:37:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-08-18T14:39:28+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.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=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/\"},\"author\":{\"name\":\"Louis Hatier\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"headline\":\"Envoyer les exceptions par mail avec Symfony2\",\"datePublished\":\"2015-08-13T17:37:12+00:00\",\"dateModified\":\"2018-08-18T14:39:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/\"},\"wordCount\":162,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"image\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.jpg\",\"keywords\":[\"PHP\",\"Symfony\"],\"articleSection\":[\"PHP\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/\",\"url\":\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/\",\"name\":\"Envoyer les exceptions par mail avec Symfony2 - Melting Poutre\",\"isPartOf\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.jpg\",\"datePublished\":\"2015-08-13T17:37:12+00:00\",\"dateModified\":\"2018-08-18T14:39:28+00:00\",\"description\":\"Comment ajouter un listener \u00e0 l'\u00e9v\u00e9nement exception de Symfony2\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#primaryimage\",\"url\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.jpg\",\"contentUrl\":\"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.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":"Envoyer les exceptions par mail avec Symfony2 - Melting Poutre","description":"Comment ajouter un listener \u00e0 l'\u00e9v\u00e9nement exception de 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\/envoyer-les-exceptions-par-mail-avec-symfony2\/","og_locale":"fr_FR","og_type":"article","og_title":"Envoyer les exceptions par mail avec Symfony2 - Melting Poutre","og_description":"Comment ajouter un listener \u00e0 l'\u00e9v\u00e9nement exception de Symfony2","og_url":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/","og_site_name":"Melting Poutre","article_published_time":"2015-08-13T17:37:12+00:00","article_modified_time":"2018-08-18T14:39:28+00:00","og_image":[{"url":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.jpg","type":"","width":"","height":""}],"author":"Louis Hatier","twitter_misc":{"\u00c9crit par":"Louis Hatier","Dur\u00e9e de lecture estim\u00e9e":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#article","isPartOf":{"@id":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/"},"author":{"name":"Louis Hatier","@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"headline":"Envoyer les exceptions par mail avec Symfony2","datePublished":"2015-08-13T17:37:12+00:00","dateModified":"2018-08-18T14:39:28+00:00","mainEntityOfPage":{"@id":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/"},"wordCount":162,"commentCount":0,"publisher":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"image":{"@id":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#primaryimage"},"thumbnailUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.jpg","keywords":["PHP","Symfony"],"articleSection":["PHP"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/","url":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/","name":"Envoyer les exceptions par mail avec Symfony2 - Melting Poutre","isPartOf":{"@id":"https:\/\/louis.hatier.me\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#primaryimage"},"image":{"@id":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#primaryimage"},"thumbnailUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.jpg","datePublished":"2015-08-13T17:37:12+00:00","dateModified":"2018-08-18T14:39:28+00:00","description":"Comment ajouter un listener \u00e0 l'\u00e9v\u00e9nement exception de Symfony2","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/louis.hatier.me\/blog\/envoyer-les-exceptions-par-mail-avec-symfony2\/#primaryimage","url":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.jpg","contentUrl":"http:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2015\/08\/logo-symfony.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\/518","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=518"}],"version-history":[{"count":7,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/518\/revisions"}],"predecessor-version":[{"id":681,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/518\/revisions\/681"}],"wp:attachment":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/media?parent=518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/categories?post=518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/tags?post=518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}