{"id":1558,"date":"2022-05-14T01:23:45","date_gmt":"2022-05-13T16:23:45","guid":{"rendered":"https:\/\/www.weschkalnies.de\/blog\/?p=1558"},"modified":"2022-05-14T20:30:51","modified_gmt":"2022-05-14T11:30:51","slug":"contao-4-13-makerbundle-nutzen-um-einen-hook-anzulegen","status":"publish","type":"post","link":"https:\/\/www.weschkalnies.de\/blog\/contao-4-13-makerbundle-nutzen-um-einen-hook-anzulegen\/","title":{"rendered":"Contao 4.13 &#8211; MakerBundle nutzen um einen Hook anzulegen"},"content":{"rendered":"<p>Seit Contao 4.13 gibt es das MakerBundle, das es bspw. erm\u00f6glicht einfach ein Boilerplate f\u00fcr einen Hook anzulegen. Im Folgenden m\u00f6chte ich das mal beispielhaft erl\u00e4utern.<br \/>\n<!--more--><br \/>\nZun\u00e4chst installiert man das MakerBundle \u00fcber SSH mit dem Befehl:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">php -d memory_limit=-1 composer require contao\/maker-bundle<\/pre>\n<p>Nach der Installation kann man sich die M\u00f6glichkeiten des MakerBundles ausgeben lassen mit:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">php vendor\/bin\/contao-console make:contao:<\/pre>\n<p>In diesem Fall soll ein Hook angelegt werden, also:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">php vendor\/bin\/contao-console make:contao:hook<\/pre>\n<p>Als Beispiel soll ein Hook angelegt werden, dessen Code ausgef\u00fchrt wird, wenn ein Formular verarbeitet wird. Dazu kann man den Hook &#8218;processFormData&#8216; nutzen. Die Klasse bezeichnen wir mal als &#8218;AddFormHook&#8216; und w\u00e4hlen geben den Hook anschlie\u00dfend ein. Es wird dann automtaisch eine neue Datei &#8217;src\/EventListener\/AddFormHook.php&#8216; erzeugt. Wir erg\u00e4nzen den Code, wie folgt:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n&lt;?php\r\n\r\ndeclare(strict_types=1);\r\n\r\nnamespace App\\EventListener;\r\n\r\nuse Contao\\CoreBundle\\ServiceAnnotation\\Hook;\r\nuse Contao\\Form;\r\n\r\n\/**\r\n * @Hook(&quot;processFormData&quot;)\r\n *\/\r\nclass AddFormHook\r\n{\r\n    public function __invoke(array $submittedData, array $formData, ?array $files, array $labels, Form $form): void\r\n    {\r\n        \/\/ Do something\r\n\r\n        $input = json_encode($formData);\r\n     \r\n        $fp = fopen('form_test_log.txt', 'w');\r\n        fwrite($fp, $input);\r\n        fclose($fp);\r\n\r\n    }\r\n}\r\n<\/pre>\n<p>Wenn ein Formular verarbeitet wird, wird im Arbeitsverzeichnis (das hier dann das \/web Verzeichnis), eine Textdatei &#8218;form_test_log.txt&#8216; erzeugt, welche die Formfelder als JSON in die Datei schreiben. Fertig! Das ist wirklich inzwischen sehr einfach, geht aber so erst ab Contao 4.13.<\/p>\n<p>Die Textdatei sieht dann bspw. so aus:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n{&quot;id&quot;:&quot;65&quot;,&quot;tstamp&quot;:&quot;1652457477&quot;,&quot;title&quot;:&quot;Test&quot;,&quot;alias&quot;:&quot;test&quot;,&quot;jumpTo&quot;:&quot;2618&quot;,&quot;sendViaEmail&quot;:&quot;1&quot;,&quot;recipient&quot;:&quot;info@medianetic.de&quot;,&quot;subject&quot;:&quot;Test&quot;,&quot;format&quot;:&quot;raw&quot;,&quot;skipEmpty&quot;:&quot;&quot;,&quot;storeValues&quot;:&quot;&quot;,&quot;targetTable&quot;:&quot;&quot;,&quot;customTpl&quot;:&quot;&quot;,&quot;method&quot;:&quot;POST&quot;,&quot;novalidate&quot;:&quot;&quot;,&quot;attributes&quot;:&quot;a:2:{i:0;s:0:\\&quot;\\&quot;;i:1;s:0:\\&quot;\\&quot;;}&quot;,&quot;formID&quot;:&quot;&quot;,&quot;allowTags&quot;:&quot;&quot;,&quot;mailerTransport&quot;:&quot;&quot;,&quot;origID&quot;:&quot;108863&quot;,&quot;isInclude&quot;:true,&quot;cssID&quot;:&#x5B;],&quot;typePrefix&quot;:&quot;ce_&quot;,&quot;headline&quot;:&quot;&quot;,&quot;hl&quot;:&quot;h2&quot;,&quot;Template&quot;:{}}\r\n<\/pre>\n<p>Die Dokumentation \u00fcber Contao Hooks finden man <a href=\"https:\/\/docs.contao.org\/dev\/reference\/hooks\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Seit Contao 4.13 gibt es das MakerBundle, das es bspw. erm\u00f6glicht einfach ein Boilerplate f\u00fcr einen Hook anzulegen. Im Folgenden m\u00f6chte ich das mal beispielhaft erl\u00e4utern.<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34],"tags":[],"class_list":["post-1558","post","type-post","status-publish","format-standard","hentry","category-contao"],"_links":{"self":[{"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/posts\/1558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/comments?post=1558"}],"version-history":[{"count":9,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/posts\/1558\/revisions"}],"predecessor-version":[{"id":1568,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/posts\/1558\/revisions\/1568"}],"wp:attachment":[{"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/media?parent=1558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/categories?post=1558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.weschkalnies.de\/blog\/wp-json\/wp\/v2\/tags?post=1558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}