Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony]Własny config.yml
Forum PHP.pl > Forum > PHP > Frameworki
Szymciosek
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')));
destroyerr
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.
Szymciosek
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.
pyro
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
Szymciosek
Doctrine jest raczej do bazy danych prawda?

Nie chodzi mi tylko o nazwę kategorii.
Chodzi o cały config danego modułu.
destroyerr
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.
Szymciosek
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.
Szymciosek
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.
destroyerr
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.
Szymciosek
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?
pauluZ
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 %}
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.