Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] własna funkcja w twigu
Forum PHP.pl > Forum > PHP
dopelganger
cześć
próbuje dodać do szablonu twig swoją funkcję. Znalazłem coś takiego i wkleiłem do kontrolera:

  1. $loader = new \Twig_Loader_Filesystem(__DIR__ . '/../../TestBundle/Resources/views');
  2. $twig = new Twig_Environment($loader);
  3. $function = new Twig_SimpleFunction('test', function () {
  4. //...
  5. });
  6. $twig->addFunction($function);


ale wyrzuca błąd i nie wiem jak zapisać zapewne path do namespace?questionmark.gifquestionmark.gif

Attempted to load class "Twig_Environment" from namespace "TestBundle\Controller".
Did you forget a "use" statement for another namespace?


a może jakiś inny sposób jest ?

prosze o pomoc
dopelganger
a mając twiga zainstalowanego w example.com/vendor/twig/
jak podaję namespace? gdzie testBundle mam w lokalizacji: example.com/src/TestBundle/
kapslokk
Ale po co Ci ten namespace itd? Wrzucilem CI link jak się robi coś takiego w symfony. Tak jak Ty chcesz to zrobić, to można se robić poza frameworkiem - np jak do jakiegos swojego projektu podpinasz twiga.
dopelganger
Cytat(kapslokk @ 1.09.2016, 11:09:07 ) *
Ale po co Ci ten namespace itd? Wrzucilem CI link jak się robi coś takiego w symfony. Tak jak Ty chcesz to zrobić, to można se robić poza frameworkiem - np jak do jakiegos swojego projektu podpinasz twiga.



a jak to użyć w kontrolerze?
dostaje błąd:

Attempted to load class "AppExtension" from namespace "TestBundle\Twig".
Did you forget a "use" statement for another namespace?
kapslokk
Pokaż kod swojego rozszerzenia do Twiga + plik w ktorym rejestrujesz je jako serwis.
dopelganger
Cytat(kapslokk @ 1.09.2016, 12:03:00 ) *
Pokaż kod swojego rozszerzenia do Twiga + plik w ktorym rejestrujesz je jako serwis.


  1. <?php
  2.  
  3. namespace TestBundle\Twig;
  4.  
  5. class AppExtension extends \Twig_Extension
  6. {
  7. public function getFilters()
  8. {
  9. return array(
  10. new \Twig_SimpleFilter('price', array($this, 'priceFilter')),
  11. );
  12. }
  13.  
  14. public function priceFilter($number, $decimals = 0, $decPoint = '.', $thousandsSep = ',')
  15. {
  16. $price = number_format($number, $decimals, $decPoint, $thousandsSep);
  17. $price = '$'.$price;
  18.  
  19. return $price;
  20. }
  21.  
  22. public function getName()
  23. {
  24. return 'app_extension';
  25. }
  26. }


services.yml

  1.  
  2. services:
  3. app.twig_extension:
  4. class: TestBundle\Twig\AppExtension
  5. public: false
  6. tags:
  7. - { name: twig.extension }


DefaultController.php

  1. $app = new AppExtension();
  2. $app->getFilters();
kapslokk
A po co w tym controllerze tworzysz obiekt AppExtension ?
dopelganger
Cytat(kapslokk @ 1.09.2016, 12:08:35 ) *
I w jakim pliku wywala Ci błąd?


w kontrolerze, jeśli nie podam to mam błąd:

The filter "price" does not exist in TestBundle:View:show.html.twig at line 12

a w pliku show.html.twig mam: {{ '5500'|price }}
kapslokk
No dobra, juz zauwazylem jak edytowales post. W kazdym razie - po co tworzysz obiekt AppExtension w kontrolerze?
dopelganger
w kontrolerze, jeśli nie podam to mam inny błąd:

The filter "price" does not exist in TestBundle:View:show.html.twig at line 12

a w pliku show.html.twig mam: {{ '5500'|price }}

ogólnie nie łapie, to gdzie i jak mam to przekazać do szablonu questionmark.gifquestionmark.gif chyba że nie rozumie idei smile.gif
kapslokk
Podaj jeszcze sciezki plikow ktore tworzyles. Ogolnie to symfony na podstawie tego services.yml powinien chyba sam zarejestrowac rozszerzenie w twigu - nie trzeba nic wiecej robic.
dopelganger
Cytat(kapslokk @ 1.09.2016, 12:18:58 ) *
Podaj jeszcze sciezki plikow ktore tworzyles. Ogolnie to symfony na podstawie tego services.yml powinien chyba sam zarejestrowac rozszerzenie w twigu - nie trzeba nic wiecej robic.


example.com/app/config/services.yml
example.com/src/TestBundle/Controller/DefaultController.php
example.com/src/TestBundle/Twig/AppExtension.php
kapslokk
biggrin.gif SOA #1
Cache usunales?
dopelganger
Cytat(kapslokk @ 1.09.2016, 12:32:37 ) *
biggrin.gif SOA #1
Cache usunales?



tak, już drugi raz smile.gif
prz3kus
Plik services.yml masz na pewno zaimportowany w pliku config?
W pliku Controller w twoim przypadku jak pisał kolega nic nie trzeba dodawać.

I spróbuj sobie zrobic pierw najprostrza funkcje w stylu:

  1. public function priceFilter($number)
  2. {
  3. return $number;
  4. }

Poza tym w twigu jest funkcja numer_format wiec nie wiem po co ja tworzyć od nowa wink.gif
http://twig.sensiolabs.org/doc/filters/number_format.html
ohm
Odpal z konsoli
app/console debug:container debug:container --tag=twig.extension
(lub bin/console - w zaleznosci od wersji symfony)

i sie okaze czy w ogole masz zarejestrowane to rozszerzenie

Cytat
ogólnie nie łapie, to gdzie i jak mam to przekazać do szablonu questionmark.gifquestionmark.gif chyba że nie rozumie idei smile.gif

Apropos tego, to framework sam ładuje te rozszerzenia (dlatego rejestrujesz je w services) żebyś nie musiał za każdym razem robić "new AppExtension()" w kodzie (tak upraszczając wink.gif )
dopelganger
Cytat(ohm @ 2.09.2016, 13:09:47 ) *
Odpal z konsoli
app/console debug:container debug:container --tag=twig.extension
(lub bin/console - w zaleznosci od wersji symfony)

i sie okaze czy w ogole masz zarejestrowane to rozszerzenie


Apropos tego, to framework sam ładuje te rozszerzenia (dlatego rejestrujesz je w services) żebyś nie musiał za każdym razem robić "new AppExtension()" w kodzie (tak upraszczając wink.gif )


mam komunikat:


[InvalidArgumentException]
The options tags, tag, parameters & parameter can not be combined with the service name argument.




Cytat(prz3kus @ 2.09.2016, 12:08:45 ) *
Plik services.yml masz na pewno zaimportowany w pliku config?
W pliku Controller w twoim przypadku jak pisał kolega nic nie trzeba dodawać.

I spróbuj sobie zrobic pierw najprostrza funkcje w stylu:

  1. public function priceFilter($number)
  2. {
  3. return $number;
  4. }

Poza tym w twigu jest funkcja numer_format wiec nie wiem po co ja tworzyć od nowa wink.gif
http://twig.sensiolabs.org/doc/filters/number_format.html


DZIĘKI exclamation.gif!!!!!!!!!!!!!!!!!!! działa exclamation.gif!!!!!!!!!!!!!!! smile.gif
nie miałem w configu exclamation.gif!!!!!!!!!!!!!!! hahahaha ale sie ciesze
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.