1 / 24

Systemy zarządzania treścią Wykład 6

dr inż. Piotr Czapiewski. Systemy zarządzania treścią Wykład 6. PHP OOP – Member overloading. Overloading Znaczenie inne niż w większości języków obiektowych Metoda dynamicznego tworzenia pól i metod „Magiczne metody” __g et() , __set() , __ isset () , __ unset ()

marlee
Download Presentation

Systemy zarządzania treścią Wykład 6

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. dr inż. Piotr Czapiewski Systemy zarządzania treściąWykład 6

  2. PHP OOP – Memberoverloading Overloading • Znaczenie inne niż w większości języków obiektowych • Metoda dynamicznego tworzenia pól i metod „Magiczne metody” • __get(), __set(), __isset(), __unset() • Wywoływane automatycznie przy próbie dostępu do nieistniejącego lub ukrytego pola (private, protected)

  3. Przykłady stosowania w Zend • Przekazywanie danych z kontrolera do widoku • Przechowywanie danych w modelu • Równocześnie dostęp obiektowy i łatwy zapis do bazy

  4. Zend Framework Budujemy blog

  5. Nowy projekt – Nasz Blog zfcreateprojectNaszBlog cdNaszBlog

  6. Zend_Layout

  7. Włączenie Zend_Layout w projekcie zfenablelayout

  8. Efekt włączenia Zend_Layout [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1

  9. Efekt włączenia Zend_Layout • Domyślny szablon layout.phtml <?phpecho$this->layout()->content; ?>

  10. Nasz Blog – szablon layout.phtml <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>ZFBlog</title><metahttp-equiv="Content-Type„ content="text/html; charset=UTF-8"><linkrel="stylesheet"type="text/css„href="<?phpecho$this->baseUrl('main.css'); ?>"></head><body><divid="page"><divid="menu"><ahref="<?phpecho$this->baseUrl(); ?>">Strona główna</a> |<ahref="">Dodaj wpis</a> |<ahref="">Zaloguj</a></div><divid="content"><?phpecho$this->layout()->content; ?></div></div></body></html>

  11. Nasz Blog – widok index.phtml <h1>Witamy w Naszym Blogu</h1>

  12. Model Dostęp do bazy danych

  13. Schemat bazy danych

  14. Konfiguracja bazy danychapplication.ini [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" resources.db.adapter = "pdo_mysql" resources.db.params.host = "localhost" resources.db.params.username = "zf_blog" resources.db.params.password = "zf_blog" resources.db.params.dbname = "zf_blog" resources.db.params.charset = utf8 [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1 resources.db.adapter = "pdo_mysql" resources.db.params.host = "localhost" resources.db.params.username = "zf_blog" resources.db.params.password = "zf_blog" resources.db.params.dbname = "zf_blog" resources.db.params.charset = utf8

  15. Zend_Db_Table • Realizacja wzorca projektowego Table Data Gateway • Tworzenie klasy pośredniczącej w dostępiedo tabeli bazy danych • Jedna tabela = jedna klasa pośrednicząca • Proste operacje – bez użycia SQL • Metody: • fetchAll(), find(), save(), delete(), insert(), createRow()

  16. Zend_Db_Table • Tworzymy model dla tabeli wpisy • Klasa Blog_Model_Wpisydziedzicząca z Zend_Db_Table_Abstract <?phpclassBlog_Model_WpisyextendsZend_Db_Table_Abstract{protected$_name = 'wpisy';}

  17. Automatyczne ładowanie klas • application.ini • Klasy z przedrostkiem Blog_ będą automatycznie ładowane (bez wywołania require) [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Blog" ...

  18. Pobieranie danych z modelu • Pobranie wszystkich wpisów: • fetchAll() • fetchAll($where, $order) • Pobranie wpisu o konkretnym ID: • find($id) $mdl = newBlog_Model_Wpisy();$wpisy = $mdl->fetchAll(); $mdl = newBlog_Model_Wpisy();$wpis = $mdl->find($id)->current();

  19. Pobieranie danych z modeluWyświetlenie wszystkich wpisów na stronie głównej • Pobranie wszystkich wpisów i przekazanie do widoku:(application/controllers/IndexController.php) classIndexControllerextendsZend_Controller_Action {publicfunctionindexAction() {$mdl = newBlog_Model_Wpisy();$wpisy = $mdl->fetchAll();$this->view->wpisy=$wpisy; } }

  20. Pobieranie danych z modeluWyświetlenie wszystkich wpisów na stronie głównej • Wyświetlenie wpisów w widoku:(application/views/scripts/index/index.phtml) classIndexControllerextendsZend_Controller_Action {publicfunctionindexAction() {$mdl = newBlog_Model_Wpisy();$wpisy = $mdl->fetchAll();$this->view->wpisy=$wpisy; } }

  21. Wyświetlanie treści wpisu • Implementacja wyświetlania treści całego wpisu • Dodanie akcji /index/pokaz • Dodanie na stronie głównej linku do akcji pokaz, przekazanie id wpisu • W akcji pokaz: pobranie pojedynczego wpisu • Wyświetlenie w widoku pokaz.phtml zfcreate action pokaz Index

  22. Dodawanie wpisów • Implementacja dodawania wpisów • Stworzenie formularza Blog_Form_Wpis • Stworzenie akcji /index/dodaj • W akcji dodaj: • Stworzenie instancji formularza • Przekazanie do widoku • W widoku dodaj.phtml: • Wyświetlenie formularza

  23. Dodawanie wpisów • Obsługa przesłanego formularza • Sprawdzenie poprawności danych • Stworzenie instancji modelu Blog_Model_Wpisy • Stworzenie nowego wiersza • Zapisanie danych

More Related