Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

9 Stron V  « < 5 6 7 8 9 >  
Reply to this topicStart new topic
> [MVC] Pytań kilka...
Ociu
post
Post #121





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Witam,
Cytat
Nie bardzo rozumiem co masz na myśli. Jeżeli moduł to pojedyncza funkcjonalność serwisu (np. newsy albo obsługa formularza) to w moim modelu moduł nazywa właśnie controller.

To już mi się wydaje bardziej logiczne. Coś mi się wcześniej ubzdurało, że controller modułu =/= moduł. 'Błądzić jest rzeczą ludzką.'

Cytat
Mój mechanizm działa bardzo podobnie, tylko dodatkowo jest konfigurowalny i ma obsługę błędów (zakładam, że Twój też).

Pewnie, że mam. Mój ErrorHandler jest dostępny na Algorytmy, klasy, funkcje

---

Tak nie mając dostępu do komputera, myślałem, troszke o linkach i stwierdziłem, ze nie ma sensu tworzenia tak długiego linku. Zastosuje się do /module/option/id/, czyli np. /produkty/pokaz/14/.

Aliasy ? hm.. nie głupie, ale. Aliasy są tworzone, dla unikalnych id. A jeśli chciałbyś stworzyć aliasy dla newsów i artykułów ? Wtedy mogą wystąpić takie same id i skrypt się sypie. Oczywiście zakładam dość ekstremalny przypadek, bo raczej nikt nie tworzy aliasów dla newsów i artów, tylko dla sklepów itp. jednak rozpatrzmy wszystkie przypadki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pozdrawiam
Go to the top of the page
+Quote Post
pies
post
Post #122





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 9.09.2005
Skąd: Sopot, Polska

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


Cytat
Tak nie mając dostępu do komputera, myślałem, troszke o linkach i stwierdziłem, ze nie ma sensu tworzenia tak długiego linku. Zastosuje się do /module/option/id/, czyli np. /produkty/pokaz/14/.

Czyli jak u mnie /controller/action/id. Moja metoda ma większe możliwości, bo nie ma siły żebyś nie potrzebował zaraz /module/option/id/value i /module/option/id/operation/id2 i tak dalej. U mnie jest to obsługiwane automatycznie (czyli nie stałe id, tylko parametry które option/action przyjmuje jak każda normalna funkcja).

Cytat
Aliasy ? hm.. nie głupie, ale. Aliasy są tworzone, dla unikalnych id. A jeśli chciałbyś stworzyć aliasy dla newsów i artykułów ? Wtedy mogą wystąpić takie same id i skrypt się sypie. Oczywiście zakładam dość ekstremalny przypadek, bo raczej nikt nie tworzy aliasów dla newsów i artów, tylko dla sklepów itp. jednak rozpatrzmy wszystkie przypadki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Nie wiem po co _można_ używać aliasów, ale ja dodałem je dlatego, że używamy tego w serwisach -- jako landing-pages do akcji promocyjnych (np. reklamy w różnych portalach mają różne landing-pages żeby na bieżąco zliczały wejścia) czy jako adresy podawane w reklamach.

Docelowo system aliasów będzie konfigurowalny przez CMS, dlatego musi być dość uniwersalny. Nie wiem jeszcze co z tego wyjdzie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Ociu
post
Post #123





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Cytat(pies @ 2005-09-16 19:52:00)
U mnie jest to obsługiwane automatycznie (czyli nie stałe id, tylko parametry które option/action przyjmuje jak każda normalna funkcja).

Mogłbyś rozwinąć swoją wypowiedź ? najlepiej kodem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Strzałek
post
Post #124





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


hmmm, no to wziąłem temat po raz kolejny już na raz przeczytałem i nie wiem już co myśleć. Tyle tutaj mądrości (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Więc ja widzę co tak i chcę się upewnić czy dobrze rozumuje:

adres wygląda tak: http://www.example.com/<action>/<view>/

i teraz wchodzimy na stronkę:

http://example.com/: odpalamy dośmyśną akcję i domyślny widok
http://example.com/articles/: odpalamy akcję articles i domyślny widok dla niej
http://example.com/news/showAll/: odpalamy akcję news i widok showAll
http://example.com/news/rss/: odpalamy akcję news i widok rss (wyświtlamy rssy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )
http://example.com/news/pdf/423: odpalamy akcję news i widok pdf oraz dajemy jeszcze na końcu id news'a który ma być wyświtlony w formacie pdf'a (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

i teraz czy czuję o co biega w tym. Co inaczej powinno to działać ? (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif)

Ten post edytował Strzałek 19.12.2005, 22:33:42
Go to the top of the page
+Quote Post
Vengeance
post
Post #125





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


To ja się dołącze z innym pytaniem. Co zrobić z Apache/php aby takie URLe jak powyżej działały? Co dać w .htaccess aby każdy taki URL odnosił się do http://example.com/index.php

Ważne także by URLe kończące się jakimś rozszerzeniem, lub takie:
http://example.com/katalog/img.jpg?a=tekst

nie były przeżucane do index.php ale interpretowane standardowo
Go to the top of the page
+Quote Post
FiDO
post
Post #126





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Vengeance: to pytanie nie ma duzego zwiazku z tematem, wiec zadaj je (a w zasadzie znajdz odpowiedz, bo to juz nie raz bylo przerabiane) w opowiednim miejscu, OT tutaj niepotrzebne.
Go to the top of the page
+Quote Post
Ociu
post
Post #127





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Strzałek: uruchom admina (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

Jako, że nabyłem doświadczenia (no dobra, trochę), przebudowałem cały system do takiej postaci:
/module/action/parametr/paratemtr1/parametr2
defaultowo /content/display/news
FilterChain - (klasycznie) kolejka -> ActionChain:
  1. <?php
  2. public function execute( HttpContext $context, FilterChain $chain ) {
  3. $build = $context->module.'_'.$context->method;
  4. $model = new $build();
  5. $model->perform($context->what, $context->vars);
  6. $chain->nextExecute($context);
  7. }
  8. ?>

(Uproszczony kod).
noi mam ./modules/content/actions/display.php
  1. <?php
  2.  class content_display
  3. public function perform($what, $a = null) {
  4. if($a == null) {
  5. $this->display($what);
  6. } else {
  7. $this->displayByArgs($what, $f);
  8. }
  9. }
  10. ?>



Pozwoliło mi to na stworzenie panelu admina (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pozdrawiam
Go to the top of the page
+Quote Post
Vomit
post
Post #128





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


Nie bede zakladal nowego topic'u poniewaz moje pytania(e) dotycza(y) MVC.

Wszystko co wiem o tym wzorcu wiem z mini-frameworka zaprezentowanego niegdys przez hwao. U siebie zrobilem wiec bardzo podobnie, nie wiem jednak jak zaimplementowac akcje i w jaki sposob.
Go to the top of the page
+Quote Post
Ludvik
post
Post #129





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Stwórz sobie interfejs dla akcji, który posiada jedną metodę, w której akcja dokonuje wszystkich operacji na danych. Żeby nie była odizolowana od otoczenia przekaż jako argument wszystkie potrzebne informacje z kontekstu (żądanie, obiekt sesji itp.). Akcje lepiej uruchamiać w łańcuchach, więc musisz znaleźć sposób na zapisanie nazwy kolejnej akcji (ja to zapisuję w obiekcie Context). Jeżeli nie ma następnej akcji zapisujesz pusty ciąg znaków. Akcje uruchamiasz w pętli...
Go to the top of the page
+Quote Post
Vomit
post
Post #130





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


Troszke strasznie to brzmi, cóz bede musial liczyc ze hwao zaimplementuje jeszcze do tego mini frameworka akcje, albo poszukac jakichs przykladow.
Go to the top of the page
+Quote Post
Nostress
post
Post #131





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 28.05.2006

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


W skrócie, ale od początku:

- Mamy FronController, który uruchamia to, co potrzebne jest każdej akcji.
- Na podstawie danych od użytkownika (np. z URL) uruchamia on odpowiednią akcje (dajmy na to listaNewsow). Tu na chwile praca FrontControllera się kończy, a funkcję określaną jako Controller przejmuje uruchomiona akcja.
- akcja wczytuje plik modelu, pobiera z niego odpowiednie dane (tu: newsy), co może wyglądać tak:

  1. <?php
  2. require_once( 'model' );
  3. class listanewsowAction
  4. {
  5.  private model;
  6.  
  7.  public function __construct()
  8.  {
  9. $this->model = new Model;
  10.  }
  11.  
  12.  public function uruchom()
  13.  {
  14. $dane = $this->model->listaNewsow();
  15.  }
  16. }
  17. ?>


I w tym miejscu mam pewne wątpliwości:

1) czy ta akcja (listanewsowAction) powinna tylko pobrać dane, zwrócić je FrontControllerowi, a ten wybiera odpowiedni widok?
2) czy akcja sama w sobie powinna pobrać dane, wybrać widok i go wyświetlić?

Mam nadzieje, ze napisalem w miare zrozumiale. Główną myślą tego posta jest "jak uruchamiać widok, jak (w którym momencie) decydujemy jak dane wyświetlić (czy to bedzie smarty, pdf czy xml)". Jak wy to robicie? A może zupełnie pomieszałem?
Go to the top of the page
+Quote Post
squid
post
Post #132





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Cytat(Nostress @ 10.07.2006, 14:02 ) *
I w tym miejscu mam pewne wątpliwości:

1) czy ta akcja (listanewsowAction) powinna tylko pobrać dane, zwrócić je FrontControllerowi, a ten wybiera odpowiedni widok?
2) czy akcja sama w sobie powinna pobrać dane, wybrać widok i go wyświetlić?

Mam nadzieje, ze napisalem w miare zrozumiale. Główną myślą tego posta jest "jak uruchamiać widok, jak (w którym momencie) decydujemy jak dane wyświetlić (czy to bedzie smarty, pdf czy xml)". Jak wy to robicie? A może zupełnie pomieszałem?

Wg danymi po pobraniu i przetworzeniu powienien zajac sie Controller (nie koniecznie FrontController), taki kontroler zdecydowalby jaki ma byc format wyjsciowy danych (na podstawie obiektu Request) i zastosowac otrzymane dane do jakiegos szablonu. Na koniec calosc z odpowiednimi naglowkami wyslac do usera.
U mnie kiedy FrontController dostaje spowrotem sterowanie z akcji uruchamia obiekt widoku, ktory sie tym zajmuje.
Go to the top of the page
+Quote Post
Ociu
post
Post #133





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Wg. mnie to zależne jest od Ciebie jak framework ma działać.

IMHO FrontController uruchamia model, akcję i widok. Model pobiera dane i robi z nimi jakieś czary, przekazuje akcji, a akcja daje widokowi i mamy wynik.
Go to the top of the page
+Quote Post
Levabul
post
Post #134





Grupa: Zarejestrowani
Postów: 197
Pomógł: 0
Dołączył: 11.07.2005

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


To ja zadam pytanie z seri pytań oczywistych (dla innych) (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) . Przedstawie to obrazowo:

Czy model jest klasą obsługującą np. daną tablę w bazie danych:
  1. <?php
  2. class News extends Model {
  3.  
  4. protected $tableName = 'news';
  5. protected $fields = array ('id', 'title', 'author_id', 'date', 'content');
  6.  
  7. }
  8.  
  9. $table = new News ();
  10. $table -> WhereAuthor_idEqual('1');
  11. $table -> OrderByIdDesc();
  12. $result = $table -> select ();
  13. ?>


Czy może jest klasą mającą na celu np. obsługę newsów (a więc nie tylko tablei news):

  1. <?php
  2. class News extends Model {
  3.  
  4. protected function getNews () {
  5. $sql = mysql_query ('SELECT `id`, `title`, `date`, `content`, `users`.`name` as author FROM `news` IN
    NER JOIN `users` ON `author_id` = `users`.`id` ORDER BY id DESC'
    );
  6. while ($row = mysql_fetch_array ($sql)) {
  7. $result[] = $row;
  8. }
  9. return $row;
  10. }
  11.  
  12. #funkcja wykozystywana przez kontroler do pobierania danych od modeli
  13. public function get () {
  14. $data = $this -> getNews ();
  15. return $data;
  16. }
  17. }
  18. ?>


Ten post edytował Levabul 15.07.2006, 12:00:21
Go to the top of the page
+Quote Post
mariuszn3
post
Post #135





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


Te wszystkie klasy należą do modelu. Model jest to wewnętrzna logika aplikacji, włącznie z częścią komunikującą się z bazą danych. Zazwyczaj część odpowiadającą za komunikację z bazą danych wydorębnia się w modelu (w moduł DAO - data access object) ale nadal logicznie rzecz ujmując jest to część modelu. Przynajmniej ja to tak rozumiem.
Go to the top of the page
+Quote Post
squid
post
Post #136





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Jesli moge zastapic slowo model akcja to akcja ma za zadanie wykonac operacje na danych nie dbajac gdzie i jak sa zapisane oraz jakiego sa formaty (no oczywiscie w pewnych granicach). Jak dobijasz sie dodanych to juz raczej nie ejst sprawa modelu, mozesz zastowosowac metode aktywnego rekordu, jakas abstrakcje w stylu PEAR::MDB lub SDO i inne wynalazki.
Go to the top of the page
+Quote Post
Vomit
post
Post #137





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


Witam,


Wydaje mi sie ze w moim projekcie udało mi sie zaimplementowac wzorzec MVC, moze nie dokladnie i nie idealnie ale przeciez nie o to chodzi, trzeba korzystac z pasujacych nam rozwiazan a nie wdrazac je na sile.

Doszedlem jednak do pewnego momentu, ktory zainteresowal mnie. Router rozbija URL i zwraca jako tablice. Pierwszy element tablicy to moduł, ktory ma zostac "odpalony". Wszystko jest przemyslane i dobrze dziala, ale teraz mam dobudowac jeszcze jeden, administracje.

Nie moze byc on wlaczany na tych samych prawach jak inne moduły. Znajduje sie on w innym folderze, w innym folderze beda jego szablony. Zle by bylo przeciez gdy w folderze styli byly default, jakisinny, styl_do_admina.

W moim projekcie FrontController, to glowna klasa zarzadzajaca modulami do wczytania. Jak zastrzec ze modul 'admin' ma byc traktowany w inny sposob?

Nie chodzi mi oczywiscie o to zebyscie powiedzieli "potraktuj to if'em" bo tak mozna najprosciej. Chodzi mi o to jak wy robicie to u siebie.
Go to the top of the page
+Quote Post
squid
post
Post #138





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Nie jestem pewien czy Router powinien rozbijac URL na tablice, wydaje mi sie ze to Geqest powinien to robic a na Router spada odpowiedzialnosc za dostarczenie mechanizmu tworzenia linkow i dostarczenia info o akcji jaka zostala zarzadana.

Nie wiem czy dobrze rozumiem ale czy pytasz o autoryzacje? Czy chcesz wiedziec czy uzytkownik X ma prawo wykonac akcje Y? Ja to robie w ten sposob, ze te akcje, ktore maja ograniczona liczbe uzytkownikow (np. akcje administracyjne) przed swoim wykonaniem musza wykonac akcje autoryzacyjna, ktora jest zwykla akcja tyle tylko ze jesli stwierdzi ze user X nie ma prawa wykonac akcji Y to rzuci wyjatkiem a do wykonania zarzadanej akcji nie dojdzie. Daje mi to duza elastycznosc co do wyboru metody i algorytmu autoryzacji, wszysko mam w jednym miejscu i cokolwiek by sie nie zmienilo wystarczy ze zmienie jedna akcje aby dostosowac sie np. do LDAP'a
Go to the top of the page
+Quote Post
mariuszn3
post
Post #139





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


Ja w ogóle rozdzieliłem kontroler części administracyjnej i użytkownika (apache jest u mnie front controllerem).
W konfiguracji http ustawiłem też aby część adminstracyjna serwisu była dostępna pod innym portem przykładowo 8100. Natomiast w katalogu htdocs mam dwa podkatalogi 'user' i 'admin'. kiedy użytkownik wchodzi poprzez tradycyjne 'www.mojadomena.com' apache przekierowuje na kontroler w katalogu 'user' a kiedy wchodzi na 'www.mojadomena.com:8100' apache przekierowuje na kontroler w katalogu 'admin'.
Oczywiście aby dokładnie tak to załatwić trzeba mieć pełny dostęp do konfiguracji apache'a.. ale ogólnie idea jest taka, że wydzieliłem osobne ścieżki na część użytkownika i administratora co oczywiście nie przeszkadza im korzystać z tych samych modułów.

Ten post edytował mariuszn3 26.07.2006, 22:52:58
Go to the top of the page
+Quote Post
Vomit
post
Post #140





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


Squid: zle zrozumiales, fakt, autoryzacja bedzie kolejnym krokiem, ale chodzi mi wlasnie o to o czym mowi mariuszn3.

Rozdzielenie czesci administracyjnej od czesci uzytkownika. Poczynajac wlasnie od kontrolera. Rozwiazanie ciekawe, ale wymaga jak juz napisał dostepu do Apache'a.
Go to the top of the page
+Quote Post

9 Stron V  « < 5 6 7 8 9 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.12.2025 - 11:36