• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jeden obiekt Twig_Environment w kilku plikach kontrolera (bez Symfony2)

Object Storage Arubacloud
0 głosów
85 wizyt
pytanie zadane 26 lutego 2017 w PHP przez Benek Szeryf (91,010 p.)

Piszę na nowo swój stary program w PHP. Z założenia aplikacja ma działać lokalnie, a przeglądarka będzie pełnić rolę interface'u, stąd zdecydowałem się nie zaprzęgać Symfony2. Z drugiej strony chciałem napisać nieco lepszy kod, więc podpiąłem Twiga, a paradygmat strukturalny zamieniam na OOP. Aplikacja bazuje na wzorcu MVC.

Zmienne możemy współdzielić między plikami, używając mechanizmu sesji. Patrząc jednak na obecny kod, tablica $_SESSION wydaje się być dość słabym rozwiązaniem. Wyczytałem, że Symfony2 posiada klasę Session, która świetnie wpasowuje się w OOP. Istnieje jednak coś takiego jak zmienne globalne w Twigu:

$twig = new Twig_Environment($loader);
$twig->addGlobal('text', new Text());

I niby wszystko jest OK, ale mam kilka plików kontrolera. Załóżmy, że mamy dwa pliki index.php oraz somefile.php. Strona powitalna prosi użytkownika o podanie nicku. Mniej więcej zrealizowałem to tak:

...
$loader = new Twig_Loader_Filesystem(__DIR__.'/templates');
$twig = new Twig_Environment($loader);
...
echo $twig->render('index.html.twig', array(
        ...
));

A w szablonie index.html.twig mamy osadzony formularz:

<form method="post" action="somefile.php">
    <input type="text" name="name" placeholder="Nick">
    <input type="submit" value="Submit">
</form>

I w somefile.php mamy taką strukturę:

...
$loader = new Twig_Loader_Filesystem(__DIR__.'/templates');
$twig = new Twig_Environment($loader);
...
echo $twig->render('somefile.html.twig', array(
    'user' => $user->name(),
    ...
));

To powoduje, że nie mogę wykorzystać metody addGlobal(), bo zmienna $twig z pierwszego pliku kontrolera przestaje istnieć, gdy skrypt index.php się wykona. Załadowanie somefile.php powoduje utworzenie nowego obiektu, który nie zna zmiennych globalnych. W jaki sposób rozwiązać ten problem?

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 413 wizyt
pytanie zadane 7 listopada 2020 w PHP przez Mariusz2333 Nowicjusz (230 p.)
0 głosów
2 odpowiedzi 101 wizyt
pytanie zadane 13 grudnia 2015 w PHP przez makoso Mądrala (7,380 p.)
0 głosów
1 odpowiedź 135 wizyt
pytanie zadane 18 kwietnia 2016 w PHP przez Miko Obywatel (1,480 p.)

92,568 zapytań

141,421 odpowiedzi

319,626 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...