811c748d30b0 — Eddie Barraco 5 years ago
Fix the tag search form using symfony forms
M config/packages/twig.yaml +2 -0
@@ 2,3 2,5 @@ twig:
     default_path: '%kernel.project_dir%/templates'
     debug: '%kernel.debug%'
     strict_variables: '%kernel.debug%'
+    form_themes:
+        - 'forms/themes.html.twig'

          
M src/Controller/ArticleController.php +4 -0
@@ 3,6 3,7 @@ 
 namespace App\Controller;
 
 use App\Entity\Article;
+use App\Form\TagFilterType;
 use App\Repository\ArticleRepository;
 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 use Symfony\Component\HttpFoundation\Request;

          
@@ 28,10 29,13 @@ class ArticleController extends Abstract
         $pageCount = $this->articleRepository->getPageCount();
         $articles = $this->articleRepository->findPaginatedOrdered($page);
 
+        $form = $this->createForm(TagFilterType::class);
+
         return $this->render('article/archive.html.twig', [
             'articles' => $articles,
             'page' => $page,
             'pageCount' => $pageCount,
+            'form' => $form->createView(),
         ]);
     }
 }

          
A => src/Form/TagFilterType.php +32 -0
@@ 0,0 1,32 @@ 
+<?php
+
+namespace App\Form;
+
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\CallbackTransformer;
+use Symfony\Component\Form\Extension\Core\Type;
+use Symfony\Component\Form\FormBuilderInterface;
+
+class TagFilterType extends AbstractType
+{
+    public function buildForm(FormBuilderInterface $builder, array $options)
+    {
+        $builder
+            ->add('tags', Type\TextType::class, [
+                'label' => 'tags'
+            ])
+            //->addModelTransformer(new CallbackTransformer(
+            //    function ($tagsAsEntities) {
+            //        dump($tagsAsEntities);
+            //        // transform the array to a string
+            //        return implode(', ', $tagsAsEntities);
+            //    },
+            //    function ($tagsAsString) {
+            //        dump($tagsAsString);
+            //        // transform the string back to an array
+            //        return explode(', ', $tagsAsString);
+            //    }
+            //))
+        ;
+    }
+}

          
M templates/article/archive.html.twig +5 -0
@@ 28,3 28,8 @@ 
         </div>
     </div>
 {% endblock %}
+
+{% block sidebar %}
+    <img src="{{ asset('img/icon.jpg') }}" class="icon"/>
+    {{ form(form) }}
+{% endblock %}

          
M templates/base.html.twig +1 -5
@@ 16,11 16,7 @@ 
                     {% block body %}{% endblock %}
                 </article>
                 <div class="side-bar">
-                    <img src="{{ asset('img/icon.jpg') }}" class="icon"/>
-                    <form class="tag-filter">
-                        <input id="tag" type="text" placeholder="tag"/>
-                        <input type="submit" value="search"/>
-                    </form>
+                    {% block sidebar %}{% endblock %}
                 </div>
             </div>
         </div>

          
A => templates/forms/themes.html.twig +5 -0
@@ 0,0 1,5 @@ 
+{% block tag_filter_widget %}
+    <div>
+        {{ form_widget(form.tags, {'attr': {'placeholder': form.tags.vars.label}}) }}
+    </div>
+{% endblock %}