Bonjour,
Je me suis appuyé sur le cookbook pour tester les extentions Twig et ajouter une fonction filter mais le service ne fonctionne pas sur Twig alors que le service qui fait le filter fonctionne bien au niveau du PHP.
J'ai crée un bundle CoPaquetBundle, ensuite le code de COPricefilter.php qui contient la fonction priceFilter qui permet à partir d'un nombre d'ajouter un symbole pour les décimal et un séparateur pour les milliers:
src/Co/PaquetBundle/Pricefilter/COPricefilter.php
Et voilà, le code de mon service intermédiaire qui contiendra notamment le tag twig.extension
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?php namespace Co\PaquetBundle\Pricefilter; class COPricefilter { public function __construct() { } public function priceFilter($number, $decimals = 0, $decPoint = '.', $thousandsSep = ',') { $price = number_format($number, $decimals, $decPoint, $thousandsSep); $price = '$'.$price; return $price; } }
src/Co/PaquetBundle/Twig/PricefilterExtension.php:
Le fichier de configuration
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <?php namespace Co\PaquetBundle\Twig; use Co\PaquetBundle\Pricefilter\COPricefilter; class PricefilterExtension extends \Twig_Extension { /** * @var COPricefilter */ private $coPricefilter; public function __construct(COPricefilter $coPricefilter) { $this->coPricefilter = $coPricefilter; } public function getFilters() { return array( new \Twig_SimpleFilter('unfiltre', array($this, 'checkPriceFilter')), ); } public function checkPriceFilter($number, $decimals = 0, $decPoint = '.', $thousandsSep = ',') { $this->coPricefilter->priceFilter($number, $decimals, $decPoint, $thousandsSep); } public function getName() { return 'COPricefilter'; } }
src/Co/PaquetBundle/Resources/config/service.yml:
Et voilà mon code pour tester sur une vue twig
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 services: co_paquet.pricefilter: class: Co\PaquetBundle\Pricefilter\COPricefilter co_paquet.pricefilter_extension: class: Co\PaquetBundle\Twig\PricefilterExtension arguments: - "@co_paquet.pricefilter" tags: - { name: twig.extension }
src/Co/PaquetBundle/Resources/view/Manage/test.html.twig:
src/Co/PaquetBundle/Resources/views/layout.html.twig
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 {% extends "CoPaquetBundle::layout.html.twig" %} {% block title %}{{ parent() }} Ajout d'un complément{% endblock %} {% block body %} <br> Nouveau projet pour tester les services!<br> Réponse Spam: {{retour}} <br> On vérifie la fonction twig: {{ checkIfSpam('le message') }} <br> {{'5600'|unfiltre}} <br> {{priceafficher}} {% endblock %}
src/Co/PaquetBundle/Resources/config/routing.yml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 {% extends "::layout.html.twig" %} {% block paquet_title %} {% endblock %} {% block paquet_block_body %} Bienvenue sur cette application permettant de tester les services Symfony sur la version 3.4. {% endblock %}
Merci de m'aider à faire fonctionner le filter qui retourne ce qu'il faut au niveau du service PHP (puisque j'avais vérifié en écrivant le résultat dans un fichier) mais qui renvoit avec twig, l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 co_paquet_homepage: path: / defaults: { _controller: CoPaquetBundle:Default:index } co_paquet_accueil: path: /accueil defaults: { _controller: CoPaquetBundle:Manage:accueil }
Merci par avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Object of class Co\PaquetBundle\Pricefilter\COPricefilter could not be converted to string"). Symfony\Component\Debug\Exception\ ContextErrorException Catchable Fatal Error: Object of class Co\PaquetBundle\Pricefilter\COPricefilter could not be converted to string
Partager