MVC w praktyce tworzymy system artykułów. cz. 1



Podobne dokumenty
Wstęp. Ale po co? Implementacja

MVC w praktyce tworzymy system artykułów. cz. 2

Programowanie zorientowane obiektowo. Mateusz Kołecki

Podstawy wzorca MVC MODEL KON- TROLER WIDOK. Odpowiada za wyświetlenie danych użytkownikowi. Zawiera dane aplikacji oraz jej logikę.

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Politechnika Częstochowska. Projektowanie systemów użytkowych II

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Programowanie obiektowe

Wprowadzenie do framework a Symfony

Wzorce prezentacji internetowych

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Laboratorium nr 3 Podstawy Ruby on Rails

Wzorce logiki dziedziny

Programowanie w Ruby

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Integracja Comarch e-sprawozdania

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Wzorce dystrybucji i wspólbieżności autonomicznej

Leszek Stasiak Zastosowanie technologii LINQ w

METODY PROGRAMOWANIA

I.Wojnicki, Tech.Inter.

Bazy danych. dr inż. Arkadiusz Mirakowski

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

akademia androida Składowanie danych część VI

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Programowanie obiektowe

Język SQL, zajęcia nr 1

Przykładowa implementacja

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Zaawansowany kurs języka Python

Wykład 05 Bazy danych

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

PHP 5 język obiektowy

Wprowadzenie do programowania aplikacji mobilnych

Hurtownia Świętego Mikołaja projekt bazy danych

I.Wojnicki, PHP. Smarty. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie. 28 marca 2014

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1


strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Wprowadzenie do Doctrine ORM

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

3. Silnik MVC Opis rozdziału Organizacja plików. Mini poradnik: Jak stworzyć grę via WWW.

Programowanie w języku Java. Bazy danych SQLite w Javie

Podstawy programowania III WYKŁAD 6

prepared by: Programowanie WWW Model-View-Controller

Dokumentacja techniczna API systemu SimPay.pl

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Bartosz Jachnik - Kino

Architektura MVC w ASP.NET. Autor wykładu: Marek Wojciechowski

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Db4o obiektowa baza danych wersja.net

PHP zaawansowane programowanie

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

Database Connectivity

Wstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania.

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Laboratorium 7 Blog: dodawanie i edycja wpisów

Metody dostępu do danych

WYKORZYSTANIE WZORCA MVC W ASP.NET

Studium Podyplomowe Aplikacje i Us ugi Internetowe Tworzenie witryn internetowych 2012/2013. CakePHP część II

[Android] Podstawy programowania

Wykład 5. SQL praca z tabelami 2

Podstawowe wykorzystanie Hibernate

REFERAT O PRACY DYPLOMOWEJ

Baza danych do przechowywania użytkowników

Post-relacyjne bazy danych

BAZA DANYCH SIECI HOTELI

Aplikacje w środowisku Java

Ćwiczenia 2 IBM DB2 Data Studio

Struktura drzewa w MySQL. Michał Tyszczenko

Laboratorium 6 Tworzenie bloga w Zend Framework

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Tworzenie modułów. Wymagania aplikacji. Tworzenie modułów. Architektura aplikacji. controllers

Builder (budowniczy) Cel: Przykład:

Programowanie w Ruby

Specyfikacja implementacyjna aplikacji serwerowej

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Projektowanie aplikacji internetowych laboratorium

Bazy danych 10. SQL Widoki

Programowanie w języku Java WYKŁAD

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Plik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Oracle PL/SQL. Paweł Rajba.

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

Paweł Cieśla. Dokumentacja projektu

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Transkrypt:

MVC w praktyce tworzymy system artykułów. cz. 1 Tworząc różnego rodzaju aplikacje natrafiamy na poważny problem utrzymania dobrej organizacji kodu przejrzystej oraz łatwej w rozbudowie. Z pomocą przychodzą nam wzorce projektowe, które wymuszają na nas pewną organizację kodu aplikacji. W świecie aplikacji www najbardziej popularny jest wzorzec MVC. Jego ideę pokażę w praktyce pisząc prosty system artykułów. Żeby w pełni zrozumieć ideę tego wzorca projektowego czytelnik musi mieć solidne podstawy znajomości PHP oraz potafić programować obiektowo. Trochę teorii... Model-View-Controller został zaprojektowany w 1979 roku przez norweskiego programistę Trygve Reenskaug pracującego wtedy nad językiem Smalltalk w laboratoriach Xerox i początkowo nosił nazwę Model-View-Editor. Ideą tego wzorca jest rozdzielenie kodu odpowiedzialnego za przetworzenie danych od kodu odpowiedzialnego za ich wyświetlanie. Model-View-Controller zakłada podział aplikacji na trzy główne części: Model - jest pewną reprezentacją problemu bądź logiki aplikacji. Widok - opisuje, jak wyświetlić pewną część modelu w ramach interfejsu użytkownika. Kontroler - przyjmuje dane wejściowe od użytkownika i reaguje na jego poczynania, zarządzając aktualizacje modelu oraz odświeżenie widoków. Brzmi strasznie, ale w praktyce okazuje się, że to wcale nie jest takie trudne... No to zaczynamy! Na samym początku stwórzmy szkielet katalogów: config/ controller/ model/ view/ templates/ Mając hierarchię katalogów stwórzmy szkielet plików wzorca MVC: controller/controller.php / @author Łukasz Socha <> @version: 1.0 1/12

@license http://www.gnu.org/copyleft/lesser.html / / This class includes methods for controllers. @abstract / abstract class Controller{ / It redirects URL. @param string $url URL to redirect @return void / public function redirect($url) { / It loads the object with the view. @param string $name name class with the class @param string $path pathway to the file with the class @return object / public function loadview($name, $path='') { / It loads the object with the model. @param string $name name class with the class @param string $path pathway to the file with the class @return object / public function loadmodel($name, $path='') { model/model.php 2/12

/ @author Łukasz Socha <> @version: 1.0 @license http://www.gnu.org/copyleft/lesser.html / / This class includes methods for models. @abstract / abstract class Model{ / object of the class PDO @var object / protected $pdo; / It sets connect with the database. @return void / public function construct() { / It loads the object with the model. @param string $name name class with the class @param string $path pathway to the file with the class @return object / public function loadmodel($name, $path='') { / It selects data from the database. @param string $from Table @param <type> $select Records to select (default (all)) @param <type> $where Condition to query @param <type> $order Order ($record ASC/DESC) @param <type> $limit LIMIT 3/12

@return array / public function select($from, $select='', $where=null, $order=null, $limit=null) { view/view.php / @author Łukasz Socha <> @version: 1.0 @license http://www.gnu.org/copyleft/lesser.html / / This class includes methods for views. @abstract / abstract class View{ / It loads the object with the model. @param string $name name class with the class @param string $path pathway to the file with the class @return object / public function loadmodel($name, $path='') { / It includes template file. @return void / public function render() { / It sets data. @param string $name 4/12

@param mixed $value @return void / public function set($name, $value) { / It gets data. @param string $name @return mixed / public function get($name) { Pliki te zawierają zarys podstawowych metod, które wykorzystamy w tworzeniu systemu artykułów używając wzorca Model-View-Controller. Klasy oznaczyłem jako abstrakcyjne, gdyż będą one dziedziczone po bardziej specjalistycznych elementach wykonujących już konkretne czynności. W dalszej części będziemy je sukcesywnie wypełniać kodem. Tworzenie kodu aplikacji zacznijmy od controller/controller.php / @author Łukasz Socha <> @version: 1.0 @license http://www.gnu.org/copyleft/lesser.html / / This class includes methods for controllers. @abstract / abstract class Controller{ / It redirects URL. @param string $url URL to redirect @return void / 5/12

public function redirect($url) { header("location: ".$url); / It loads the object with the view. @param string $name name class with the class @param string $path pathway to the file with the class @return object / public function loadview($name, $path='view/') { $path=$path.$name.'.php'; $name=$name.'view'; try { if(is_file($path)) { require $path; $ob=new $name(); else { throw new Exception('Can not open view '.$name.' in: '.$path); catch(exception $e) { echo $e->getmessage().'<br /> File: '.$e->getfile().'<br /> Code line: '.$e->getline().'<br /> Trace: '.$e->gettraceasstring(); exit; return $ob; / It loads the object with the model. @param string $name name class with the class @param string $path pathway to the file with the class @return object / public function loadmodel($name, $path='model/') { $path=$path.$name.'.php'; $name=$name.'model'; try { if(is_file($path)) { require $path; 6/12

$ob=new $name(); else { throw new Exception('Can not open model '.$name.' in: '.$path); catch(exception $e) { echo $e->getmessage().'<br /> File: '.$e->getfile().'<br /> Code line: '.$e->getline().'<br /> Trace: '.$e->gettraceasstring(); exit; return $ob; Metoda redirect() służy do przekierowania strony na wskazany adres. Z kolei metody loadmodel() i loadview() inicjują obiekty klas widoku oraz modelu. Plik model/model.php będzie wyglądać tak: / @author Łukasz Socha <> @version: 1.0 @license http://www.gnu.org/copyleft/lesser.html / / This class includes methods for models. @abstract / abstract class Model{ / object of the class PDO @var object / protected $pdo; / It sets connect with the database. @return void / 7/12

public function construct() { try { require 'config/sql.php'; $this->pdo=new PDO('mysql:host='.$host.';dbname='. $dbase, $user, $pass); $this->pdo->setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); catch(dbexception $e) { echo 'The connect can not create: '. $e- >getmessage(); / It loads the object with the model. @param string $name name class with the class @param string $path pathway to the file with the class @return object / public function loadmodel($name, $path='model/') { $path=$path.$name.'.php'; $name=$name.'model'; try { if(is_file($path)) { require $path; $ob=new $name(); else { throw new Exception('Can not open model '.$name.' in: '.$path); catch(exception $e) { echo $e->getmessage().'<br /> File: '.$e->getfile().'<br /> Code line: '.$e->getline().'<br /> Trace: '.$e->gettraceasstring(); exit; return $ob; / It selects data from the database. @param string $from Table 8/12

@param <type> $select Records to select (default (all)) @param <type> $where Condition to query @param <type> $order Order ($record ASC/DESC) @param <type> $limit LIMIT @return array / public function select($from, $select='', $where=null, $order=null, $limit=null) { $query='select '.$select.' FROM '.$from; if($where!=null) $query=$query.' WHERE '.$where; if($order!=null) $query=$query.' ORDER BY '.$order; if($limit!=null) $query=$query.' LIMIT '.$limit; $select=$this->pdo->query($query); foreach ($select as $row) { $data[]=$row; $select->closecursor(); return $data; Konstruktor klasy Model ma nawiązać połączenie z bazą danych (używamy do tego PDO). Metoda loadmodel() ma za zadanie stworzyć obiekt z klasą modelu. Natomiast select() będziemy używać do pobieranie danych. Dodajmy jeszcze kod do pliku view/view.php: / @author Łukasz Socha <> @version: 1.0 @license http://www.gnu.org/copyleft/lesser.html / / This class includes methods for views. @abstract / abstract class View{ / 9/12

It loads the object with the model. @param string $name name class with the class @param string $path pathway to the file with the class @return object / public function loadmodel($name, $path='model/') { $path=$path.$name.'.php'; $name=$name.'model'; try { if(is_file($path)) { require $path; $ob=new $name(); else { throw new Exception('Can not open model '.$name.' in: '.$path); catch(exception $e) { echo $e->getmessage().'<br /> File: '.$e->getfile().'<br /> Code line: '.$e->getline().'<br /> Trace: '.$e->gettraceasstring(); exit; return $ob; / It includes template file. @param string $name name template file @param string $path pathway @return void / public function render($name, $path='templates/') { $path=$path.$name.'.html.php'; try { if(is_file($path)) { require $path; else { throw new Exception('Can not open template '. $name.' in: '.$path); 10/12

catch(exception $e) { echo $e->getmessage().'<br /> File: '.$e->getfile().'<br /> Code line: '.$e->getline().'<br /> Trace: '.$e->gettraceasstring(); exit; / It sets data. @param string $name @param mixed $value @return void / public function set($name, $value) { $this->$name=$value; / It gets data. @param string $name @return mixed / public function get($name) { return $this->$name; Metoda loadmodel() działa tak samo jak w poprzednich plikach. Metodę render() będziemy wykorzystywać do dołączania plików z kodem HTML. Tworzymy tabele bazy danych Na zakończenie tej części stwórzmy tabele kategorii i artykułów w bazy danych: CREATE TABLE categories( id integer auto_increment, name varchar(100), primary key(id) ); CREATE TABLE articles( id integer auto_increment, title varchar(100), 11/12

content text, date_add datetime, autor varchar(100), id_categories integer, primary key(id), foreign key(id_categories) references categories(id) ); W pliku config/sql.php zapiszmy dane dostępu do bazy danych. $host='localhost'; $dbase='baza danych'; $user='user'; $pass='hasło'; W kolejnej części cyklu zaczniemy już dokładniej poznawać idee MVC. Stworzymy fragment aplikacji odpowiedzialny za dodawanie kategorii. 12/12