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 %}