Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] własna funkcja w twigu
dopelganger
post 1.09.2016, 09:57:20
Post #1





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 27.10.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował dopelganger 1.09.2016, 10:00:19
Go to the top of the page
+Quote Post
kapslokk
post 1.09.2016, 10:00:21
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


http://symfony.com/doc/current/templating/..._extension.html
Go to the top of the page
+Quote Post
dopelganger
post 1.09.2016, 10:06:02
Post #3





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 27.10.2012

Ostrzeżenie: (0%)
-----


a mając twiga zainstalowanego w example.com/vendor/twig/
jak podaję namespace? gdzie testBundle mam w lokalizacji: example.com/src/TestBundle/

Ten post edytował dopelganger 1.09.2016, 10:08:05
Go to the top of the page
+Quote Post
kapslokk
post 1.09.2016, 10:09:07
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
dopelganger
post 1.09.2016, 10:26:45
Post #5





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 27.10.2012

Ostrzeżenie: (0%)
-----


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?


Ten post edytował dopelganger 1.09.2016, 10:35:18
Go to the top of the page
+Quote Post
kapslokk
post 1.09.2016, 11:03:00
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Pokaż kod swojego rozszerzenia do Twiga + plik w ktorym rejestrujesz je jako serwis.
Go to the top of the page
+Quote Post
dopelganger
post 1.09.2016, 11:06:00
Post #7





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 27.10.2012

Ostrzeżenie: (0%)
-----


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();


Ten post edytował dopelganger 1.09.2016, 11:08:20
Go to the top of the page
+Quote Post
kapslokk
post 1.09.2016, 11:08:35
Post #8





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


A po co w tym controllerze tworzysz obiekt AppExtension ?

Ten post edytował kapslokk 1.09.2016, 11:09:46
Go to the top of the page
+Quote Post
dopelganger
post 1.09.2016, 11:09:49
Post #9





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 27.10.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował dopelganger 1.09.2016, 11:15:27
Go to the top of the page
+Quote Post
kapslokk
post 1.09.2016, 11:13:03
Post #10





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No dobra, juz zauwazylem jak edytowales post. W kazdym razie - po co tworzysz obiekt AppExtension w kontrolerze?
Go to the top of the page
+Quote Post
dopelganger
post 1.09.2016, 11:15:41
Post #11





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 27.10.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował dopelganger 1.09.2016, 11:18:49
Go to the top of the page
+Quote Post
kapslokk
post 1.09.2016, 11:18:58
Post #12





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
dopelganger
post 1.09.2016, 11:22:48
Post #13





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 27.10.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował dopelganger 1.09.2016, 11:24:51
Go to the top of the page
+Quote Post
kapslokk
post 1.09.2016, 11:32:37
Post #14





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


biggrin.gif SOA #1
Cache usunales?
Go to the top of the page
+Quote Post
dopelganger
post 1.09.2016, 11:39:47
Post #15





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 27.10.2012

Ostrzeżenie: (0%)
-----


Cytat(kapslokk @ 1.09.2016, 12:32:37 ) *
biggrin.gif SOA #1
Cache usunales?



tak, już drugi raz smile.gif
Go to the top of the page
+Quote Post
prz3kus
post 2.09.2016, 11:08:45
Post #16





Grupa: Zarejestrowani
Postów: 260
Pomógł: 30
Dołączył: 22.01.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ohm
post 2.09.2016, 12:09:47
Post #17





Grupa: Zarejestrowani
Postów: 618
Pomógł: 143
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


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 )

Ten post edytował ohm 2.09.2016, 12:16:42
Go to the top of the page
+Quote Post
dopelganger
post 7.09.2016, 11:20:57
Post #18





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 27.10.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 07:26