Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyświetlanie strony przy routingu
Lukasz4
post 19.05.2019, 15:37:18
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.05.2019

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


Cześć, jestem dość świeży w routingu. Co prawda już się zacząłem z tym bawić, ale nie chcę zrobić sobie złych nawyków ani tym bardziej złego kodu. Będę bardzo wdzięczny jeśli rzucicie na to okiem i powiecie czy można tak robić i czy jest to dobre rozwiązanie. Jeśli nie to proszę o sugestię co zmienić/co i jak zrobić.

Otóż korzystam z AltoRouter. Mój kod wygląda tak:
  1. // Router
  2. $router = new altoRouter();
  3. $view = new view($account, $profile);
  4.  
  5. $router->map('GET', '/', function() use($view){
  6. $view->render('homepage', 'Panel');
  7. });

Stworzyłem obiekt z metodą render, aby nie includować po stokroć plików header oraz footer. Pierwszy string w powyższym kodzie to nazwa pliku jaki ma zostać wczytany, a drugi to tytuł strony. Natomiast klasa wygląda tak:
  1. class view{
  2. public function __construct($account, $profile){
  3. $this->account = $account;
  4. $this->profile = $profile;
  5. }
  6. public function render($page_name, $page_title){
  7. $this->account->isLogged();
  8. global $db;
  9. if(is_readable('views/panel/templates/header.php')){
  10. require 'views/panel/templates/header.php';
  11. }
  12. if(is_readable('views/panel/'.$page_name.'.php')){
  13. require 'views/panel/'.$page_name.'.php';
  14. }
  15. if(is_readable('views/panel/templates/footer.php')){
  16. require 'views/panel/templates/footer.php';
  17. }
  18. }
  19. }

W docelowej stronie (homepage.php), chcąc uzyskać dostęp do jakiejś zmiennej, muszę wcześniej przekazać ją do metody. I na końcowej stronie wyświetlam ją poprzez $this-> moja zmienna/metoda. Czy to jest dobry sposób czy macie jakieś lepsze rozwiązania? Bo przyznam, że wydaje mi się to dziwne, że muszę przekazywać dużo zmiennych do konstruktora klasy view (w przykładzie ich nie ma, ale w skrypcie to m.in zmienna z bazą danych, kontem, profilem i jeszcze parę innych, które akurat na tej stronie są mi potrzebne)
Go to the top of the page
+Quote Post
adbacz
post 20.05.2019, 17:55:08
Post #2





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Do metody render przekaż sobie tablicę. W metodzie render ją przyjmij i wykonaj funkcję extract(). Funkcja ta stworzy tyle zmiennych ile będziesz miał indeksów w tablicy. Dzięki czemu każdą wartość z tablicy będziesz miał w osobnej zmiennej.

  1. $router->map('GET', '/', function() use($view){
  2. $view->render('homepage', [
  3. 'title' => 'Panel'
  4. ]);
  5. });
  6.  
  7. // W metodzie renderującej
  8. public function render($view, array $data = []) {
  9. extract($data);
  10.  
  11. if(is_readable('views/panel/'.$page_name.'.php')){
  12. require 'views/panel/'.$page_name.'.php';
  13. }
  14. }
  15.  
  16. // W widoku
  17. echo $title;


Poszukaj sobie przykładów renderowania widoków z innych systemów szablonów. Poczytaj dokumentację, kod. Jeśli uczyć to od najlepszych smile.gif

Podeślę Ci dwa linki do krótkiego snippetu kodu dwóch systemów szablonów, na których możesz na szybko zobaczyć jak je uruchomić.
Twig - https://phpcenter.pl/biblioteki/twig-system-szablonow/
Aura View - https://phpcenter.pl/biblioteki/aura-view-system-szablonow/

W obu jest podobnie. Podajemy nazwę widoku i tablicę z danymi które mają być do niego przesłane.
Go to the top of the page
+Quote Post
viking
post 20.05.2019, 18:48:20
Post #3





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Ja bym wziął cały https://www.slimframework.com/ bo np global $db; w render woła o pomstę do nieba.


--------------------
Go to the top of the page
+Quote Post
Lukasz4
post 20.05.2019, 19:10:02
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.05.2019

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


Dziękuję bardzo za wskazówki smile.gif
a to global $db to było tylko chwilowe i przez przypadek tu wstawiłem. Już tego nie mam w kodzie tongue.gif
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: 28.03.2024 - 09:19