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

[MVC] Wyświetlanie wyników z SQL

Object Storage Arubacloud
0 głosów
813 wizyt
pytanie zadane 7 sierpnia 2015 w PHP przez Kazuhiro Użytkownik (910 p.)
zmienione kategorie 7 sierpnia 2015 przez Kazuhiro
Załóżmy, że chcę wyświetlić w widoku dane z mysql. Niby zadanie proste i można go wykonać na kilka sposobów. Mogę przekazać do widoku metodę result() i tak za pomocą pętli foreach wydrukwać dane, ale trochę inaczej to drukowanie będzie wyglądać w przypadku różnych zapytań. Drugi sposób to wysłanie gotowego kodu html do widoku, ale to rozwiązanie nie wygląda profesjonalnie. Gdzieś widziałem właśnie przykład w którym używano pierwszego sposobu, ale ten przykład pokazywał użycie w zasadzie jenego kontrolera (chyba nawet nie użuto modelu). Ja musiałbym najpierw pokazać widokowi, której pętli ma użyć. Do tego pamiętajmy, że nie wszystkie podstrony są pobierane z bazy danych, np. formularz rejestracji. Jak, prawidłowo powinno się rozwiązać ten problem?

3 odpowiedzi

0 głosów
odpowiedź 7 sierpnia 2015 przez Boshi VIP (100,240 p.)
Zobacz jak rozwiązane jest to w FW. W konrolerze masz metodę render która odpowiada za przekazanie wyników do widoku.
komentarz 7 sierpnia 2015 przez Kazuhiro Użytkownik (910 p.)
Zapomniałem dodać, że korzystam z Code Igniter.
1
komentarz 7 sierpnia 2015 przez Boshi VIP (100,240 p.)
To w pierwszej kolejności zmień tego FW na coś co jest jeszcze rozwijane. CI to trup zakopany i zjedzony przez robaki.
komentarz 7 sierpnia 2015 przez Kazuhiro Użytkownik (910 p.)
Co polecasz? Cake? Yii? Zależy mi na prostocie i żeby zbytnio nie obciążał serwera.
komentarz 7 sierpnia 2015 przez Boshi VIP (100,240 p.)
Yii2, sam  się jego uczę, niski próg wejścia, dość przyjazny.  Bardzo dobra dokumentacja, oczywiście po  angielsk, no ale  to podstawa.  Mozna i polecić symfony, ale nie jest już taki prosty do ogarnięcia  w porównaniu do innych FW. Cake z tego co wiem też dość fajny, ale jego doc. leży.
komentarz 7 sierpnia 2015 przez Kazuhiro Użytkownik (910 p.)
Akurat mam jeden projekt do skończenia w CI. Dosyć prosty, więc nawet umarły już FW da radę. Z angielskim raczej nie powinno być problemu jeśli nie ma super specjalistycznego języka :)

Co do Cake'a widziałem ten manual -> http://book.cakephp.org/3.0/_downloads/en/CakePHPCookbook.pdf . Nie zagłębiałem się w niego, ale na pierwszy rzut oka wygląda na dosyć przyjazny (chociaż strasznie długi).
0 głosów
odpowiedź 7 sierpnia 2015 przez Comandeer Guru (601,110 p.)

Problem w tym, że jeśli kontroler pośredniczy w wymianie danych między widokiem i modelem to nie jest to MVC. W MVC widok ma bezpośredni dostęp do modelu: https://github.com/zyxist/Trinity https://r.je/views-are-not-templates.html

Natomiast w normalnych frameworkach PHP robi się to metodą render kontrolera lub podobną.

komentarz 19 marca 2018 przez Artek Stary wyjadacz (11,800 p.)

A jeżeli w routerze zrobię tak:

$DaneModelu = new JakiesPobieranieDanychZModelu();
$Widok = new ObiektWidoku($DaneModelu)
require "JakisPlikSzablonu";

To jest MVC czy już nie? A może jakaś odmiana?

komentarz 19 marca 2018 przez Comandeer Guru (601,110 p.)
Czemu router wgl cokolwiek wie o modelu?
komentarz 19 marca 2018 przez Artek Stary wyjadacz (11,800 p.)

Jak rozumiem nie powinien. Czyli tak ogólnie mówiąc powinno to wyglądać tak(bynajmniej z tego co obczaiłem do tej pory) : 

Router jedynie parsuje adres URL i wydobywa ewentualne parametry. Gdy w konstruktorze wydobędzie z adresu url akcję wybraną przez użytkownika dzięki automatycznemu ładowaniu klas ładuje odpowiedni kontroler i na tym jego rola się kończy

Kod wyglądałby mniej więcej tak:

$router = new Router();
$controler = $router->controler;

Napisałeś :

W MVC widok ma bezpośredni dostęp do modelu:

 

Czyli jak rozumiem skoro widok ma bezpośredni dostęp do modelu to potem uruchamiamy jakąś metodę widoku, która z kolei wewnątrz uruchamia odpowiednią metodę modelu, pobiera z niego informacje i później wyświetla użytkownikowi.

Tak to ma wyglądać?

1
komentarz 21 marca 2018 przez Comandeer Guru (601,110 p.)

Czyli jak rozumiem skoro widok ma bezpośredni dostęp do modelu to potem uruchamiamy jakąś metodę widoku, która z kolei wewnątrz uruchamia odpowiednią metodę modelu, pobiera z niego informacje i później wyświetla użytkownikowi.

W teorii kontroler decyduje jedynie o tym, co zrobić z danym żądaniem i przekierowuje dalej.

Niemniej nie wiem, czy superpuryzm w tym wypadku się sprawdza. Najczęściej spotykany model jest taki, że router decyduje na podstawie URL-a, który kontroler wywołać, a kontroler deleguje obsługę żądania do poszczególnych serwisów (tzw. thin controller). 

komentarz 21 marca 2018 przez Artek Stary wyjadacz (11,800 p.)
Spoko. Dzięki za info. Z racji, że zabieram się za pisanie swojego pierwszego wzorca mvc do aplikacji, której projekt w tym momencie nie jest bardzo rozbudowany to pozostanę przy tym jak to określiłeś superpuryźmie :)
0 głosów
odpowiedź 19 marca 2018 przez Artek Stary wyjadacz (11,800 p.)

Czytam artykuł Commandera i nie mogę wyczaić jednej rzeczy. Autor zamieścił taki kod.

class UserListController {

    private $model;

    

    public function __construct(UserListModel $model) {

        $this->model = $model;

    }



    public function search($criteria) {

        $this->model->filterByName($critiera);

    }

}

Czyli teraz już poza definicjami klasy jak powinien wyglądać kod? Co podać jako parametr w konstruktorze i jak? I co potem?

 

Podobne pytania

0 głosów
1 odpowiedź 120 wizyt
pytanie zadane 2 marca 2020 w PHP przez f-filip Nowicjusz (120 p.)
0 głosów
1 odpowiedź 338 wizyt
pytanie zadane 18 marca 2018 w Nasze projekty przez Artek Stary wyjadacz (11,800 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...