Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> Obsługiwanie stron - switch najlepszy?, pages.php?
Kocurro
post 21.04.2009, 11:10:29
Post #21





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Sorry za offtopica.

Apocalyptiq jak chcesz pisać takie posty to lepiej zdejmij sobie ze stopki ten link i buttona - już google mnie przyprowadziło do tego tematu jak sprawdzałem "firmę" estender.net, szkoda sobie psuć wizerunek zadając takie pytania winksmiley.jpg

Potencjalny klient to zobaczy i odpuści a wierz mi, że klienci na których możesz dobrze zarobić prześwietlą Cię najpierw porządnie.

Pozdrawiam,
Łukasz

ps: w sprawie serwera z Rubym zapraszam na PW
Go to the top of the page
+Quote Post
Apocalyptiq
post 21.04.2009, 14:57:15
Post #22





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Dzięki za rade smile.gif

Hm, tak poczytałem o MVC, fajna sprawa. Ale też poczytałem o tym, że lepiej czasami stosować gotowe rozwiązania, np. Zend Framwork. On korzysta z modelu MVC? Ja jakoś lubię programować od podstaw... Używa ktoś tego Zend Framworka? Warto się tym zainsteresować? Np. do serwisu z newsami, artykulami, komentarzami i ocenami do nich z panelem admina do tego wszystkiego, będzie użyteczny? Bo niby takie proste serwisy raczej nie problem bez żadnych frameworków napisać.


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post
megawebmaster
post 21.04.2009, 15:06:08
Post #23





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

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


Szczerze Symfony z jego Admin-Generatorem ma większą moc od Zenda winksmiley.jpg Zend to raczej zbiór bardzo dobrych bibliotek i trzeba umieć z niego korzystać. A poza tym - chyba wszystkie frameworki korzystają ze wzorca MVC smile.gif
Go to the top of the page
+Quote Post
Apocalyptiq
post 21.04.2009, 15:15:38
Post #24





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Ja jednak spróbuje samemu napisać prosty system oparty o MVC - z użytkownikami (rejestracja, logowanie), newsami, artykułami, no i zapleczem adminowym do tego wszystkiego.

Mam jeszcze jedno pytanie co do tego MVC - przeczytałem tutorial o nim, ale nie było sprecyzowane, jak w tym Kontrolerze (sterowniku) przekierowywać na dane działanie, przez switch? smile.gif Np. user wszedł na podstronę z jakimś newsem, więc mam page=new i id=5 na przykład, więc muszę utworzyć switcha ze wszstkimi możliwymi akcjami (podstronami), a tam przy każdej będzie zawarte pobranie odpowiednich danych z bazy (model) i ich wyświetlenie (widok, u mnie odpowiada za to system szablonów PHPTAL, więc sprowadza sie to do załadowania odpowiedniego szablonu xml i przekazaniu do niego danych pobranych z bazy)? Bo wyżej mówiliście, że switch to złe wyjście, więc tu chyba go nie powinno być?


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post
ikssde
post 21.04.2009, 15:43:39
Post #25





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Masz url w postaci :

a ) zendowy router umożliwia tworzenie takich urli

  1. <?php
  2. www.strona.pl/news/id/4, skrócony na
  3. www.strona.pl/news/4
  4. ?>


b ) bez bawienia się w rewrite

  1. <?php
  2. www.strona.pl/index.php?controller=news&action=show&id=4
  3. ?>


Następnie w swoim głównym kontrolerze (centrum aplikacji) odbierasz wpisany adres przy pomocy, np. $_GET i wiesz, że musisz wywołać kontroler o nazwie "news" i akcję należącą do tego kontrolera o nazwie "show", a także masz przekazać jej parametr "id=4".
Kontroler to nic innego jak klasa, pliki z kontrolerami możesz sobie includować z jakiegoś folderu, w razie braku pliku o podanej nazwie możesz dołączyć domyślny (np. z błędem), a potem to już tylko wywołujesz daną funkcję należącą do kontrolera(klasy).

Ten post edytował ikssde 21.04.2009, 15:44:20
Go to the top of the page
+Quote Post
Apocalyptiq
post 21.04.2009, 15:55:41
Post #26





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Dzięki, nieco mi to wyjaśniłeś smile.gif Więc najpierw ładuję kontroler klase News, ktorej przekazuje numer newsa. Ta klasa pobiera z bazy danych treść tego newsa i inne dane o nim jak data itp, następnie przekazuje to wszystko do widoku - tj. ładuje odpowiedni szablon html i wrzuca w zawartość w odpowiednie miejsce informacje o newsie? Więc ta klasa news (praktycznie należaloby ją nazwać "New", news to przecież nowości a nie nowość z ang smile.gif, no ale słowo New jest chyba zastrzeżone w php) będzie wyglądać tak:
  1. <?php
  2. class News{
  3. private $id;
  4. public $news;
  5. public function __construct($id){
  6. $this->news=$db->getRow('SELECT * FROM news WHERE id=?',$id); // $db - obiekt klasy PDO
  7. }
  8. }
  9. $news=new News($id);
  10. $szablon_html->news=$news->news
  11. ?>

Tak to by wyglądało? No i jeszcze musiałbym przekazać jakoś obiekt z bazą danych $db do klasy News, co tu pominąłem winksmiley.jpg


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post
ikssde
post 21.04.2009, 16:06:47
Post #27





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


W gwoli ścisłość ta architektura implementuje trzy elementy Model-Widok-Kontroler, u Ciebie są tylko dwa.

Masz kontroler (controllerNews) w którym odwołujesz się do modelu (news), w modelu (klasie) masz zbiór funkcji odpowiedzialnych za wszelkie działania na określonym zbiorze, w tym przypadku na nowościach, czyli, np. odczytywanie po id, odczytywanie wszystkiego, odczytywanie 3 najnowszych, itp.

  1. <?php
  2. class controllerNews {
  3.  
  4. ...
  5. public function show($id)
  6. {
  7.        $model = new News();
  8.        $widok->news = $model->getNews($id);
  9. }
  10. ...
  11.  
  12. }
  13.  
  14. class News {
  15.  
  16. ...
  17. public function __construct()
  18. {
  19.        ... laczenie sie z baza danych, itp....
  20. }
  21.  
  22. public function getNews($id)
  23. {
  24.        return $pdo->getRow('SELECT * FROM news WHERE id=?', $id);
  25. }
  26.  
  27. ?>


Ten post edytował ikssde 21.04.2009, 16:10:09
Go to the top of the page
+Quote Post
megawebmaster
post 21.04.2009, 16:36:00
Post #28





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

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


@ikssde ładnie wytłumaczył - masz 3 warstwy - kontroler, który za pomocą modelu pobiera dane z bazy np. tak:
  1. <?php
  2. $model = new News;
  3. $dane = $model->pobierzNajnowsze();
  4. ?>

I dopiero teraz przekazujesz dane do widoku. Czyli do systemu szablonów. No i oprócz samego kontrolera wywołuje się w nim akcję (metodę), żeby ułatwić zarządzanie. Np. metoda index() w kontrolerze News odpowiada za wyświetlenie 10 najnowszych wiadomości i uruchamiana jest jak nie poda się innych metod. Metoda pokazJeden() w kontrolerze News odpowiada za wyświetlenie tylko jednej wiadomości o id, jaki przekażesz w URL'u.
Go to the top of the page
+Quote Post
Apocalyptiq
post 21.04.2009, 16:54:13
Post #29





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Dzięki za wytłumaczenie tego, ale jeszcze co do tej akcji index() nie rozumiem - nie ma być ona przecież funkcją __construct? Jak ma być uruchamiana jak sie nie poda innej metody (która rozumiem ma coś wyświetlać)?


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post
megawebmaster
post 21.04.2009, 17:37:30
Post #30





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

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


__construct() jest uruchamiane niezależnie od wszystkiego - czyli za każdym utworzeniem obiektu. Zaś metoda index() będzie działać tylko, jeśli ją wywołasz. Skrótem - do __construct() możesz wrzucić wszystko co się będzie powtarzać dla każdej akcji.

EDIT: Musisz decydować wcześniej przed tworzeniem kontrolera jaka metoda ma być wywołana. Jak nie ma żadnej wywołujesz index().

Ten post edytował megawebmaster 21.04.2009, 17:49:42
Go to the top of the page
+Quote Post
Apocalyptiq
post 21.04.2009, 20:01:30
Post #31





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Dzięki za wytłumaczenie tego mechanizmu smile.gif

Tak zacząłem czytać o tym Zend Framwork, no i z tego co czytałem wygląda na użyteczny, ale na wstępie zauważyłem jedną wadę - waży 17MB, ta minimalna wersja ;/ Może jakieś nieużywane biblioteki z tego można wywalić? Bo raczej nie wykorzystam wszystkich mozliwości Zenda przy np. stronce z newsami, artykułami, komentarzami i panelem admina do tego smile.gif


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post
ikssde
post 21.04.2009, 22:14:01
Post #32





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Jak budujesz sobie stronę na podstawie Zenda, to nie dodawaj bibliotek Zend'owskich z automatu tylko je sobie includuj, żebyś później wiedział co jest wykorzystywane. Tym sposobem z 17mb zrobi Ci się 3 smile.gif Zresztą 17mb to chyba znowu nie aż tak dużo, no ale jak uważasz.

Tak przy okazji, jeśli chcesz korzystać z gotowych rozwiązań, a nie masz ochoty uczyć się masy innych niepotrzebnych (niekoniecznie potrzebnych) rzeczy, korzystaj z Zenda smile.gif Naprawdę dobrze się z tym pracuje, może Cię zniechęcić polski support, ale jeśli w miarę dobrze władasz angielskim nie będziesz miał najmniejszych problemów.
Go to the top of the page
+Quote Post
Apocalyptiq
post 22.04.2009, 10:08:24
Post #33





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Narazie coś nie mogę się w tym połapać - pracuje z PHPTALem, systemem szablonów - jest świetny i za nic nie chce z niego zrezygnować smile.gif Znalazłem gotowe rozwiązanie jak zintegrować Zend z PHPTALem, ale właśnie nie mogę się w tym wszystkim połapać. O MVC poczytałem, o Zendzie również troche. Ale w tym tutorialu jest troche dziwna struktura:
Cytat
|/application
| |/modules # modules directory
| | |/default # directory of the module named 'default'
| | | |/contollers # controllers of the default module
| | | |/views # views of the default module (may contain also helpers and filters)
| | | | /templates # templates of the default module (default ZF name is scripts)
| | | | /layouts # this one holds scripts (templates) for the IndexController
| | |/nextmodule
| | | |/controllers
| | | |/...

W folderze application jest folder modules, w którym są chyba wszystkie moduły, a w każdym module kontrollery do niego i widoki. Mi się zdawało, że to kontrollery mają być trzonem danej akcji, a nie moduły które tylko pobierają dane z bazy danych ;| A dodatkowo coś nie mogę tu znaleźć modułów - widzę tu tylko kontroller (w folderze controllers IndexController.php) i widok (layouts i templates w views, tj. główne szablony strony www i szablony podstron). Tak ta struktura powinna wyglądać? I gdzie są te moduły? smile.gif

A co mi w ogóle daje ten Zend że tak warto jego używać? Chyba nie problem napisać klasę kontrollera, modułu i widoku smile.gif Bo nie wiem czy warto wtajemniczać się w to, czy zabrać się za swój mały MVC framework.

Ten post edytował Apocalyptiq 22.04.2009, 10:02:42


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post
megawebmaster
post 22.04.2009, 12:10:26
Post #34





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

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


Warto, bo otrzymujesz pewne stabilne i pewne mechanizmy (np. Router, FrontController), które zostały sprawdzone przez wielu ludzi, więc przetestowane pod każdym możliwym względem.
Go to the top of the page
+Quote Post
AxZx
post 22.04.2009, 12:11:54
Post #35





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


Cytat(Apocalyptiq @ 18.04.2009, 16:35:05 ) *
no nie, ale ściąga plik winksmiley.jpg


nie, nie ściąga pliku. przeglądarka pobiera tylko efekt działania pliku z php.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Apocalyptiq
post 22.04.2009, 13:36:23
Post #36





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Nawet bym przeszedł na Zend, ale wiem, gdzie są te moduły? No bo miały być te kontrollery - mam IndexController.php, widoki - w views są jakieś szablony, a gdzie sie podziały moduły? Struktura dwa posty wyżej

Narazie nie mogę dodać nawet podstrony drugiej :/ Dodałem plik NewsController.php do folderu z kontrollerami, tam klase NewsController, w szablonach dodałem folder news i tam index.tpl.html. A zend wywala mi:
Cytat
Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in /home/szymon/domains/estender.net/public_html/framework/application/modules/default/controllers/NewsController.php, line 1' in /home/szymon/domains/estender.net/public_html/framework/library/Zend/Controller/Response/Abstract.php:281 Stack trace: #0 /home/szymon/domains/estender.net/public_html/framework/library/Zend/Controller/Response/Abstract.php(114): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 /home/szymon/domains/estender.net/public_html/framework/application/Bootstrap.php(115): Zend_Controller_Response_Abstract->setHeader('Content-Type', 'text/html; char...') #2 /home/szymon/domains/estender.net/public_html/framework/application/Bootstrap.php(39): Bootstrap::sendResponse(Object(Zend_Controller_Response_Http)) #3 /home/szymon/domains/estender.net/public_html/framework/www/index.php(4): Bootstrap::run() #4 {main} thrown in /home/szymon/domains/estender.net/public_html/framework/library/Zend/Controller/Response/Abstract.php on line 281

Co robie nie tak?


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post
megawebmaster
post 22.04.2009, 14:15:21
Post #37





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

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


http://www.heavymind.net/zend-framework-tutorial/

Samouczek do Zenda po polsku. Co prawda jest tego tylko początek, ale początek jest najtrudniejszy wg. mnie winksmiley.jpg
Go to the top of the page
+Quote Post
ikssde
post 22.04.2009, 14:21:05
Post #38





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Moduły to nie modele. Równie dobrze możesz pominąć katalog z modułem default, jest to tylko takie udogodnienie, że w jednym module możesz umieścić stronę, a w drugim np. panel administracyjny.
Go to the top of the page
+Quote Post
Apocalyptiq
post 25.05.2009, 10:44:57
Post #39





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Tym razem robiłem wszystko od początku, zgodnie z tutorialem Zend Frameworka. Utknąłem przy tworzeniu podstrony do errora - stworzyłem ErrorController.php i error/error.phtml, ale przy wpisaniu jakiegoś nieistniejącego urla, wywala mi błąd:
Cytat
Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in /home/szymon/domains/apocalyptiq.duu.pl/application/bootstrap.php, line 1' in /home/szymon/domains/apocalyptiq.duu.pl/library/Zend/Controller/Response/Abstract.php:281 Stack trace: #0 /home/szymon/domains/apocalyptiq.duu.pl/library/Zend/Controller/Response/Abstract.php(299): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 /home/szymon/domains/apocalyptiq.duu.pl/library/Zend/Controller/Response/Abstract.php(727): Zend_Controller_Response_Abstract->sendHeaders() #2 /home/szymon/domains/apocalyptiq.duu.pl/library/Zend/Controller/Front.php(972): Zend_Controller_Response_Abstract->sendResponse() #3 /home/szymon/domains/apocalyptiq.duu.pl/public_html/index.php(48): Zend_Controller_Front->dispatch() #4 {main} thrown in /home/szymon/domains/apocalyptiq.duu.pl/library/Zend/Controller/Response/Abstract.php on line 281

Mój .htaccess w public_html:
Cytat
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC,L]

Hm, co robię nie tak?

Może to jest spowodowane tym, że mam nieco inny .htaccess niż kazali w tutorialu (zmieniłem nieco, ponieważ ten z tutoriala mi nie działał), oto ten z tutoriala:
Cytat
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]




Zainstalowałem XAMPPa (Ubuntu 8.10), może to wina serwera była że nie łykał tego .htaccess z tutoriala zenda. Jeszcze ściągam tam zenda, jak sprawdze czy coś to dało, dam znać smile.gif

Wrzucenie w .htaccess tego:
Cytat
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1

W koncu doprowadziło do działania Zenda smile.gif Tak czytam tutoriala, no i faktycznie Zend ma fajne funkcjonalności smile.gif

Jednak przeszedłem na Kohana Framework - tworzony przez społeczność a nie firmę, jest lżejsza, elastyczniejsza, po prostu super mi się na niej pracuje :-)


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post

2 Stron V  < 1 2
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: 27.05.2024 - 22:11