Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP+Symfony] KnpMenuBundle błąd z routingiem
Forum PHP.pl > Forum > PHP
dopelganger
cześć
zainstalowałem plugin KnpMenuBundle i robie prosty przykładzik, ale wywala mi błąd kiedy podaje np: 'route' => 'test', bez wprowadzenia wartości dla 'route' jest ok (tzn wyświetla menu, bez linków).


An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "test" as such route does not exist.") in src/Test/TextPageBundle/Resources/views/Default/menu.html.twig at line 2.


Kod dla src/Test/TextPageBundle/Menu/ Builder.php

  1. namespace Test\TextPageBundle\Menu;
  2.  
  3. use Knp\Menu\FactoryInterface;
  4. use Symfony\Component\DependencyInjection\ContainerAware;
  5.  
  6. class Builder extends ContainerAware
  7. {
  8. public function mainMenu(FactoryInterface $factory, array $options)
  9. {
  10. $menu = $factory->createItem('root');
  11. $menu->addChild('test',array('route' => 'test'));
  12. // $menu->addChild('kontakt',array('route' => 'kontakt'));
  13. return $menu;
  14. }
  15. }
Forti
Route o nazwie "test" nie istnieje? -,-

Jesteś pewien, że w plikach route.yml masz coś na wzór:

Kod
test:
    pattern: /some_adress
    defaults: { _controller: AcmeBuildController:Main }
ikssde
A masz zdefiniowany taki routing w konfiguracji?
dopelganger
Cytat(ikssde @ 11.03.2015, 15:37:45 ) *
A masz zdefiniowany taki routing w konfiguracji?


konfiguracji, tzn gdzie?
Forti
Napisałem tobie. Route.yml w bundlaxh badz w app/config. Potrafisz obsługiwać podstawy symfony?
dopelganger
Cytat(Forti @ 11.03.2015, 16:12:21 ) *
Napisałem tobie. Route.yml w bundlaxh badz w app/config. Potrafisz obsługiwać podstawy symfony?


robiłem wg.: http://symfony2-docs-pl.readthedocs.org/pl.../KnpMenuBundle/

opcjonalny krok 4:
"Pakiet dostarczany jest z rozsądną konfiguracją domyślną, która jest wykazana poniżej. Jeśli pominie się ten krok, użyta będzie konfiguracja domyślna."

ok dodałem coś takiego:

  1. # app/config/config.yml
  2. knp_menu:
  3. twig:
  4. template: menu.html.twig # u mnie jest plik o nazwie: menu.html.twig
  5. templating: false
  6. default_renderer: twig


ale nadal mi wywala błąd:

Unrecognized option "template" under "knp_menu"

próbuje zresztą różnych kombinacji, i ciągle inny błąd, wkleiłem ten pierwszy
Forti
Pokaz twój plik config.yml. Pewnie zle masz sformatowane.
dopelganger
Cytat(Forti @ 11.03.2015, 17:23:32 ) *
Pokaz twój plik config.yml. Pewnie zle masz sformatowane.


  1. imports:
  2. - { resource: parameters.yml }
  3. - { resource: security.yml }
  4.  
  5. framework:
  6. #esi: ~
  7. #translator: { fallback: "%locale%" }
  8. secret: "%secret%"
  9. router:
  10. resource: "%kernel.root_dir%/config/routing.yml"
  11. strict_requirements: ~
  12. form: ~
  13. csrf_protection: ~
  14. validation: { enable_annotations: true }
  15. templating:
  16. engines: ['twig']
  17. #assets_version: SomeVersionScheme
  18. default_locale: "%locale%"
  19. trusted_hosts: ~
  20. trusted_proxies: ~
  21. session:
  22. # handler_id set to null will use default session handler from php.ini
  23. handler_id: ~
  24. fragments: ~
  25. http_method_override: true
  26.  
  27. # Twig Configuration
  28. twig:
  29. debug: "%kernel.debug%"
  30. strict_variables: "%kernel.debug%"
  31.  
  32. # Assetic Configuration
  33. assetic:
  34. debug: "%kernel.debug%"
  35. use_controller: false
  36. bundles: [ ]
  37. #java: /usr/bin/java
  38. filters:
  39. cssrewrite: ~
  40. #closure:
  41. # jar: "%kernel.root_dir%/Resources/java/compiler.jar"
  42. #yui_css:
  43. # jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
  44.  
  45. # Doctrine Configuration
  46. doctrine:
  47. dbal:
  48. driver: "%database_driver%"
  49. host: "%database_host%"
  50. port: "%database_port%"
  51. dbname: "%database_name%"
  52. user: "%database_user%"
  53. password: "%database_password%"
  54. charset: UTF8
  55. # if using pdo_sqlite as your database driver, add the path in parameters.yml
  56. # e.g. database_path: "%kernel.root_dir%/data/data.db3"
  57. # path: "%database_path%"
  58.  
  59. orm:
  60. auto_generate_proxy_classes: "%kernel.debug%"
  61. auto_mapping: true
  62.  
  63. mappings:
  64. StofDoctrineExtensionsBundle: ~
  65.  
  66. stof_doctrine_extensions:
  67. default_locale: pl_PL
  68. orm:
  69. default:
  70. tree: true
  71. loggable: true
  72. timestampable: true
  73. sluggable: true
  74. translatable: true
  75.  
  76. # Swiftmailer Configuration
  77. swiftmailer:
  78. transport: "%mailer_transport%"
  79. host: "%mailer_host%"
  80. username: "%mailer_user%"
  81. password: "%mailer_password%"
  82. spool: { type: memory }
  83.  
  84. knp_menu:
  85. twig:
  86. template: menu.html.twig
  87. #templating: false
  88. default_renderer: twig
  89.  
  90.  
  91.  

Forti
Na prawdę nie widzisz różnicy miedzy tym co jest w dokumentacji a ty co masz w pliku config.yml??

Podpowiedz: Tabulator


Poczytaj koniecznie o formacie .yaml jezeli zabierasz sie za takie rzeczy.
dopelganger
Cytat(Forti @ 11.03.2015, 17:48:30 ) *
Na prawdę nie widzisz różnicy miedzy tym co jest w dokumentacji a ty co masz w pliku config.yml??

Podpowiedz: Tabulator

Poczytaj koniecznie o formacie .yaml jezeli zabierasz sie za takie rzeczy.


usunięcie tabulacji nic nie zmienia
Forti
Kod
knp_menu:
   twig:  
   template: menu.html.twig
   #templating: false
   default_renderer: twig



Kod
knp_menu:
   twig:  
       template: menu.html.twig
   #templating: false
   default_renderer: twig



znajdz 10 różnic.

Przycisk "pomógł" widzisz mam nadzieje! biggrin.gif
dopelganger
Cytat(Forti @ 11.03.2015, 22:31:50 ) *
Kod
knp_menu:
   twig:  
   template: menu.html.twig
   #templating: false
   default_renderer: twig



Kod
knp_menu:
   twig:  
       template: menu.html.twig
   #templating: false
   default_renderer: twig



znajdz 10 różnic.

Przycisk "pomógł" widzisz mam nadzieje! biggrin.gif


po poprawce, wróciliśmy do punktu wyjścia:

An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "test" as such route does not exist.") in src/Test/TextPageBundle/Resources/views/Default/menu.html.twig at line 2.

Forti
Odpowiedz na poniższe pytania a dojdziesz do rozwiązania które podane zostało tutaj TRZY razy.


1. Co to jest routing w symfony i innych frameworkach?
2. Czy wiesz jaki błąd wywala? Potrafisz to przeczytać?
3. Czy wiesz w którym miejscu wywala błąd? Potrafisz to przeczytać?

I po problemie. Ja więcej chyba takim ludziom pomagać nie chce, nie dość, że czytać nie potrafią to nawet pomógł nie klikną potem tongue.gif
BigPig
Krótka piłka:

użyj komendy: router:debug

Jeśli twój routing test tam nie występuje, to oznacza, że faktycznie tego routingu nie masz.
A żeby się dowiedzieć jak dodać route, polecam fajną dokumentację:
http://symfony.com/doc/current/book/routing.html
dopelganger
Cytat(BigPig @ 12.03.2015, 10:30:51 ) *
Krótka piłka:

użyj komendy: router:debug

Jeśli twój routing test tam nie występuje, to oznacza, że faktycznie tego routingu nie masz.
A żeby się dowiedzieć jak dodać route, polecam fajną dokumentację:
http://symfony.com/doc/current/book/routing.html


w pliku DefaultController.php mam routing (poniżej) i nie wiem jak to złożyć z tym KnpMenuBundle, zrobiłem krok po kroku z przykładu i bład wywala.
Strona działa, póki nie dodam parametru: $menu->addChild('test',array('route' => 'test'));
a dokładnie: 'route' => 'test'

  1. /**
  2.   * Test
  3.   *
  4.   * @Route("/test")
  5.   * @Template()
  6.   */
  7. public function testAction()
  8. {
  9. return array();
  10. }
Forti
Zdefiniuj nazwe routingu -,-

  1. /**
  2.   * Test
  3.   *
  4.   * @Route("/test", name="test"
  5.  )
  6.   * @Template()
  7.   */
ikssde
To, że masz zdefiniowaną ścieżkę, która prowadzi do akcji w twoim kontrolerze i ta ścieżka to "test" wcale nie znaczy, że ten routing ma identyfikator "test".


Zamień swój kod na:

  1. /**
  2.   * Test
  3.   *
  4.   * @Route("/test", name="test")
  5.   * @Template()
  6.   */


@edit

Odnośnie tego co pisał Forti to domyślna nazwa routingu zbudowana jest tak: NazwaBundla_NazwaKontrolera_NazwaAkcji
Forti
Cytat(ikssde @ 12.03.2015, 14:37:15 ) *
To, że masz zdefiniowaną ścieżkę, która prowadzi do akcji w twoim kontrolerze i ta ścieżka to "test" wcale nie znaczy, że ten routing ma identyfikator "test".


Zamień swój kod na:

  1. /**
  2.   * Test
  3.   *
  4.   * @Route("/test", name="test")
  5.   * @Template()
  6.   */


@edit

Odnośnie tego co pisał Forti to domyślna nazwa routingu zbudowana jest tak: NazwaBundla_NazwaKontrolera_NazwaAkcji



Troche źle mu napisałem z tym Test / test więc poprawiłem. Nigdy nie korzystałem z routingu w annotatacjach, przy translate czy przeszukiwaniu jest to nie wygodne wink.gif
dopelganger
zaktualizowałem na:
@Route("/test", name="test")

ale nadal to samo, to jakaś paranoja,, zapewne błąd (jeśłi występuje) jest prosty jak ruch...nie, że sie tak wyraże

An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "test" as such route does not exist.") in ..../Resources/views/Default/menu.html.twig at line 2.
Forti
wywal annotacje i użyj normalnie .yml plików ;]
ikssde
Dobra, a pokaż kod pliku src/Test/TextPageBundle/Resources/views/Default/menu.html.twig i app/config/routing.yml

Na 90% nie masz tego co powinno być w routing.yml.

  1. testing:
  2. resource: "@NazwaBundla/Controller/"
  3. type: annotation
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.