Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony2][Symfony]Własny config.yml
Szymciosek
post 8.06.2013, 10:47:57
Post #1





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Witam,

jak w osobnym bundle (moduł np GalleryBundle) umieścić powiedzmy w Project/GalleryBundle/Resources/config/... plik config.yml z zawartością

Kod
title: Kolekcja


i później w kontrolerze odczytać te wartości?

powiedzmy jakoś tak:

return $this->render('ProjectGalleryBundle:Gallery:gallery_index.html.twig', array('title' => $this->get('title')));
Go to the top of the page
+Quote Post
destroyerr
post 8.06.2013, 12:02:39
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Zgodnie z duchem Symfony2 raczej nie powinno być takich luźno "biegających" parametrów po całej aplikacji bo za bardzo nie wiadomo do czego je odnieść. Takie parametry raczej powinny być logicznie zgrupowane i używane przez jakąś usługę.
Skoro miałaby to być osobna usługa to w jej kodzie możesz sobie odczytać dowolny plik (yml, xml...). Ze wsparcie frameworka lub bez. Najprostszym rozwiązaniem jest wywołanie Yaml::parse() w konstruktorze takiej usługi.
Niestety będzie to wykonywane za każdym razem. Lepiej więc byłoby konfigurować tą usługę przy budowaniu kontenera zależności. Jak to zrobić? W dokumentacji jest rozdział: Service Container, na samym dole są również linki konieczne do przeczytania. Jako przykład może posłużyć Ci gotowy bundle np. DoctrineBundle.
Natomiast jeśli chciałbyś używać parametrów z kontenera zależności (a tak można wnioskować z Twojego kodu) to odradzam takie rozwiązanie.
Go to the top of the page
+Quote Post
Szymciosek
post 8.06.2013, 12:11:42
Post #3





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Chodzi mi tylko o miejsce na zmienne, które będą używane gdzieś dalej.

Tworząc moduł galerii, nie chcę za każdym razem wchodzić do kontrolera, szukać, gdzie zmienić linię kodu żeby title się zmienił w dziale z KOLEKCJA na PORTFOLIO...

Więc pomyślałem o takim właśnie pliku yml (config był tutaj przykładem), gdzie mógłbym trzymać takowe zmienne takie jak title czy width/height itd...
Chodzi o to żeby po wrzuceniu bundla do projektu edytować 1 góra 2 pliki (routing oraz te zmienne).

Masz jakiś inny pomysł? Słucham, jestem otwarty na propozycje.
Go to the top of the page
+Quote Post
pyro
post 8.06.2013, 12:18:55
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Z tego co widzę Tobie chodzi o tworzenie nazw kategorii i ich parametrów. Według mnie zamiast bawić się z configami powinieneś zainteresować się Doctrine


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Szymciosek
post 8.06.2013, 12:21:02
Post #5





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Doctrine jest raczej do bazy danych prawda?

Nie chodzi mi tylko o nazwę kategorii.
Chodzi o cały config danego modułu.
Go to the top of the page
+Quote Post
destroyerr
post 8.06.2013, 12:53:16
Post #6





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Cytat
Masz jakiś inny pomysł? Słucham, jestem otwarty na propozycje.

To może napisz co nie odpowiada Ci w rozwiązaniach, które Ci podałem. Chcesz zrobić inaczej to sobie to zrób inaczej. Utwórz sobie plik takowe_zmienne.yml wrzuć sobie zmienne jakie tam chcesz, a np. w kontrolerze:
  1. $takoweZmienne = Yaml::parse('/sciezka/do/pliku/takowe_zmienne.yml');

Jeszcze innym rozwiązaniem jest porzucenie tego frameworka skoro jego filozofia Ci nie odpowiada.
Go to the top of the page
+Quote Post
masteron
post 8.06.2013, 13:59:31
Post #7





Grupa: Zarejestrowani
Postów: 88
Pomógł: 10
Dołączył: 18.12.2007
Skąd: Kraków

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


Tworzenie swoich plików yml to zły pomysł.


Zbuduj konfigurację GalleryBundle http://symfony.com/doc/2.2/cookbook/bundles/extension.html
będziesz wtedy w jednym miejscu miał opcje konfiguracyjne bundle takie jak chcesz


--------------------
Masz czas i chęci na zlecenie napisania bundle w Symfony2? A może szukasz pracy jako programista Symfony2 na pełen etat?
Napisz.
Go to the top of the page
+Quote Post
Szymciosek
post 8.06.2013, 14:07:47
Post #8





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Nawet tak zrobiony YML?

  1.  
  2.  
  3. class GalleryController extends Controller
  4. {
  5. private $configFile;
  6.  
  7. /**
  8.   * Displays base view in gallery
  9.   */
  10. public function showGalleryAction()
  11. {
  12. $this->getConfig();
  13.  
  14. return $this->render('CoreGalleryBundle:Gallery:gallery_index.html.twig', array('title' => $this->configFile['title'])); //default view
  15. }
  16.  
  17. private function getConfig()
  18. {
  19. $kernel = $this->get('kernel');
  20. $path = $kernel->locateResource('@CoreGalleryBundle/Resources/config/gallery_config.yml');
  21.  
  22. $this->configFile = Yaml::parse($path);
  23. }
  24.  
  25. }
  26.  
  27.  


oraz sam YML

Kod
title: Kolekcja



Tego oczywiście będzie z czasem więcej.

Ten post edytował Szymciosek 8.06.2013, 14:09:51
Go to the top of the page
+Quote Post
masteron
post 8.06.2013, 14:19:08
Post #9





Grupa: Zarejestrowani
Postów: 88
Pomógł: 10
Dołączył: 18.12.2007
Skąd: Kraków

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


W ten sposób jest za każdym razem parsowany i też niewygodny sposób jakbyś pracował z innymi programistami.




--------------------
Masz czas i chęci na zlecenie napisania bundle w Symfony2? A może szukasz pracy jako programista Symfony2 na pełen etat?
Napisz.
Go to the top of the page
+Quote Post
Szymciosek
post 8.06.2013, 14:20:02
Post #10





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Mógłbyś podać jakiś przykład z tego co podałeś? Bo tak czytam, przeglądam, ale nic z tego nie dociera jakoś do mnie za bardzo.
Go to the top of the page
+Quote Post
destroyerr
post 8.06.2013, 14:24:01
Post #11





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Tak, to wciąż zły pomysł. Jeśli się uprzesz to tak zrobisz.
Jak nadpisać konfigurację z pliku: gallery_config.yml?
Testujesz aplikacje żeby wykryć np. brak klucza title w tym pliku (lub nawet brak pliku)?
Jak sam piszesz tego będzie z czasem więcej to i większy będzie chaos.
Go to the top of the page
+Quote Post
masteron
post 8.06.2013, 16:23:02
Post #12





Grupa: Zarejestrowani
Postów: 88
Pomógł: 10
Dołączył: 18.12.2007
Skąd: Kraków

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


Są tam przykłady pod tym linkiem przecież:

  1. $rootNode
  2. ->children()
  3. ->scalarNode('gallery_items_count')
  4. ->defaultValue(14)
  5. ->info('ilość wyników na liście')
  6. ->cannotBeEmpty()
  7. ->end()
  8. ->end()
  9. ;


--------------------
Masz czas i chęci na zlecenie napisania bundle w Symfony2? A może szukasz pracy jako programista Symfony2 na pełen etat?
Napisz.
Go to the top of the page
+Quote Post
Szymciosek
post 8.06.2013, 16:33:38
Post #13





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Również był tam przykład tego typu:

http://knplabs.pl/blog/symfony2-dic-extension

Zrobiłem tak jak tutaj, ale teraz się zastanawiam jak dostać się z GalleryController do tej wartości, która jest przechowywana w zmiennej $config w klasie KnpTestExtension.
Robiąc w tej klasie:
var_dump($config);

otrzymuję tablicę, a w niej zmienną transform

Czy to już jest dobre rozwiązanie?
No i czy do każdej zmiennej z pliku config.yml muszę tworzyć odniesienie w services?
Go to the top of the page
+Quote Post
pauluZ
post 18.01.2016, 12:44:23
Post #14





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 9.02.2004
Skąd: Toruń

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


Do Twig można wstrzyknąć wartości z parameters.yml pisząc w gł. config.yml
  1. twig:
  2. debug: "%kernel.debug%"
  3. globals:
  4. site: %zmienna_z_parameters%
  5.  

Ja sobie zrobiłem tablice (niewielką) i coś tam mogę przekazać (parameters.yml):
  1. parameters:
  2. site:
  3. name: Galeria
  4. description: 'Serwis galeryjny'

Jest pare minusów tego rozwiązania ale czytam sobie te wartości i w kontgrolerach:
  1. $site = $this->container->getParameter('site');

i mam do nich dostęp w TWIGach: {{ site.name }}

Problem to to że Symfony rzuca warningiem gdy nie ma tego podklucza w tavblicy "site" czyli np. to może być czasami problematyczne:
{% if site.description is empty %}


--------------------
pauluZ
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: 7.06.2024 - 17:10