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



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

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Programowanie w Ruby

Programowanie w Ruby

Program szkolenia: Symfony, nowoczesny framework PHP

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

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

Wprowadzenie do framework a Symfony

EPI: Interfejs Graficzny Wykład nr 4 Podstawy frameworku Rails

Wprowadzenie do Doctrine ORM

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

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

Encje w Drupalu. Tworzenie własnych encji i ich wpływ na poprawę wydajności

Laboratorium 6 Tworzenie bloga w Zend Framework

Widoki zagnieżdżone, layout. 1. Wprowadzenie Repozytoria danych

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

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

media Blitz wydajne sytemy szablonów

Plan prezentacji. Framework CakePHP. CakePHP. Przydatne adresy. Wstęp. Przedmiot: Aplikacje internetowe. Przykłady. Kontroler. Dr inż.

Plan prezentacji. Framework CakePHP. CakePHP. Przydatne adresy. Wstęp. Przedmiot: Aplikacje internetowe. Przykłady. Kontroler. Dr inż.

ANGULARJS TWORZENIE APLIKACJI INTERNETOWYCH

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

Projektowanie aplikacji z bazami danych

REFERAT O PRACY DYPLOMOWEJ

Technologie internetowe ASP.NET Core. Paweł Rajba

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

1 Wprowadzenie do J2EE

Laboratorium nr 3 Podstawy Ruby on Rails

ASP.NET MVC. Grzegorz Caban 20 stycznia 2009

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

Kurs ASP.NET ASP.NET CORE APLIKACJE WEBOWE

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Laboratorium 7 Blog: dodawanie i edycja wpisów

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Baza danych i ORM mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Walidacja danych w ASP.NET MVC

Instrukcja laboratoryjna

app/ - folder zawiera pliki konfiguracyjne dla całej aplikacji src/ - folder zawiera cały kod PHP aplikacji

Forum Client - Spring in Swing

PHP zaawansowane programowanie

Podstawowe wykorzystanie Hibernate

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Django : praktyczne tworzenie aplikacji sieciowych / Antonio Mele. Gliwice, cop Spis treści

Programowanie komponentowe 5

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Smarty PHP. Leksykon kieszonkowy

Programowanie zorientowane obiektowo. Mateusz Kołecki

app/ - folder zawiera pliki konfiguracyjne dla całej aplikacji Można wybrać sposób zapisu konfiguracji: YML, XML, PHP

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Modele danych walidacja widoki zorientowane na model

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Backend Administratora

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

Ruby i Ruby on Rails. Mateusz Drożdżyński

Podejście obiektowe do relacyjnych baz danych Hibernate.

Tworzenie i wykorzystanie usług sieciowych

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Dotacje na innowacje. Inwestujemy w waszą przyszłość.

Dokumentacja techniczna. Młodzieżowe Pośrednictwo Pracy

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2016

Tworzenie aplikacji Web Alicja Zwiewka. Page 1

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

Projektowanie i architektura frameworka w języku PHP. Tomasz P.F. Kowalczyk

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Spring Framework - wprowadzenie i zagadnienia zaawansowane

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Wykład 5: PHP: praca z bazą danych MySQL

Zrąb JavascriptMVC. Krzysztof Płocharz. 6 kwiecień Uniwersytet Warszawski

URL, URI różnice i podobieństwa

Programowanie obiektowe

Budowa nowoczesnej aplikacji SPA z wykorzystaniem biblioteki Ember.js

Plan. Aplikacja. Architektura aplikacji. Architektura aplikacji Tworzenie aplikacji Application Builder podstawy

Kurs WWW. Paweł Rajba.

Wzorce logiki dziedziny

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

LINQ TO SQL w dużym skrócie jest to zintegrowany język zapytao pozwalający na mapowanie relacyjnych baz danych na model obiektowy.

akademia androida Składowanie danych część VI

Programowanie obiektowe

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Baza numerów Wersja 1.1

Web frameworks do budowy aplikacji zgodnych z J2EE. Jacek Panachida

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Baza danych sql. 1. Wprowadzenie

Klasy i obiekty cz II

Transkrypt:

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

Co narzuca MVC? Architekturę aplikacji wykonaną w konwencji Model Widok - Kontroler Model reprezentacja danych i dostępu do nich Widok elementy interfejsu użytkownika Kontroler realizacja logiki biznesowej, sterowanie aplikacją, modułami

Zalety MVC Brak zależności kodowych warstwy modelu od warstwy widoku Łatwiejsza możliwość wprowadzania zmian do widoku (występuje częściej niż modelu) Przejrzystość aplikacji w strukturze Możliwość rozgraniczenia prac pomiędzy specjalistów z określonych dziedzin

Wady MVC struktura projektu wprowadzenie dodatkowej abstrakcji, wystąpienie nowych zachowań, całość trudniejsza do debugowania Zmiana modelu pociąga za sobą konieczność zmian wszystkich widoków na nim bazujących Trudne testowanie warstwy widoku

ORM Object-Relational Mapping Odwzorowanie obiektowo-relacyjne Przedstawienie modelu bazy danych przy pomocy podejścia obiektowego z zachowaniem relacji

Jak używać ORM? Każdej tabeli odpowiada klasa Każdemu polu w klasie odpowiada zmienna w klasie Realizacja zmian w bazie danych powinna być oparta na działaniu na klasach bez konieczności wprowadzania zapytań SQL

Zastosowanie ORM Gdzie go stosować? System wykorzystujący bazę danych jako źródło danych jest zapisany obiektowo Baza danych jest relacyjna (zawiera wskazania jednej tabeli na inną lub na siebie samą) Przy średnich i dużych projektach

Zalety ORM Developer operuje w całym projekcie wyłącznie na obiektach Brak konieczności znajomości zapytań SQL dla podstawowych operacji Utrzymywanie połączeń i zarządzanie nimi Wstępna ochrona przed atakami SQL Injection

Wady ORM Występowanie problemów z wydajnością Konieczność wprowadzania ręcznych zmian w ORM w przypadku bardziej skomplikowanych zapytań

OOP Powiązanie danych (pól) z zachowaniami (procedurami) w ramach obiektu (klasy) Różne w stosunku do pisania proceduralnego (gdzie brak jest powiązań między polami, a procedurami)

Zastosowanie OOP Jeśli można to wszędzie Dobre przedstawienie zależności komponentów Ułatwione testowanie wybranych komponentów z całej aplikacji Możliwość podmiany klasy zachowując interfejs wiążący ją z innymi

MVC, ORM, OOP Dobry projekt powinien umieć wiązać wszystkie wymienione elementy: MVC, ORM, OOP Powinien wspierać programistę w wytwarzaniu aplikacji zgodnie z wymienionymi zasadami Powinien ułatwiać testowanie, utrzymanie i zarządzanie zmianami w tworzonym projekcie zachowując pierwotną koncepcję

Kierunek rozwoju Pisanie aplikacji samodzielnie od podstaw w języku PHP: Monotonne i czasochłonne Wysoki nakład pracy potrzebny w wytworzenie koniecznych klas i funkcji podstawowych (ORM) Konieczność samodzielnego porządkowania plików w strukturze Jak można ułatwić sobie pracę pisząc w PHP i chcąc zachować wymienione standardy, a jednocześnie robić to wydajnie? Zastosować jeden ze szkieletów aplikacji webowej wspomagający developerów podczas pracy

CakePHP Darmowy framework służący do szybkiego wytwarzania aplikacji internetowych przy zachowaniu ich elastyczności i modyfikowalności Szerokie i aktywne community Dogodne licencjonowanie Kompatybilność z PHP 4 i 5 Zgodność z MVC Zintegrowany generator CRUD Wbudowany mechanizm walidacji formularzy Lokalizacja, cache, ACL...

Model MVC w CakePHP

Komponenty Wspomagają kontrolery, posiadając własny element logiki biznesowej. beforefilter() - wykonanie przed logiką kontrolera BeforeRender() - wykonanie po logice kontrolera ale przed wygenerowaniem widoku AfterFilter() - wykonanie po logice kontrolera oraz po wygenerowaniu widoku.

Helpery Tak jak komponenty dla kontrolerów elementy wpomagają generowanie widoku Wykorzystywane w różnych widokach, bądź w widokach generowanych z listy

Behaviours Tak jak komponenty oraz helpery, zachowania dodają nową funkcjonalność po stronie modelu aplikacji beforefind() afterfind() beforevalidate() beforesave() aftersave() beforedelete() afterdelete()

CakePHP typowe żądanie

Struktura folderów Config - pliki konfiguracyjne, szczegóły połączenia z bazą danych, uruchamiania, konfiguracja podstawowa silnika Controllers zawiera kontrolery i komponenty aplikacji Libs zawiera własne biblioteki Locale pliki internacjonalizacji Models źródła danych, modele i zachowania (behaviours) Plugins dodatki Tmp pliki tymczasowe Vendors biblioteki i klasy pochodzące od innych dostawców

Konwecje CakePHP Plik zawierający klasę MojaKlasa powinien posiadać nazwę moja_klasa.php MojController moj_controller.php MojComponent, MojBehaviour, MojView, MojHelper moj.php Nazwy kontrolerów dla danej tabeli modelu są w liczbie mnogiej (model User kontroler UsersController) Tabela w bazie danych: "people" Model opisujący tę tabelę: "Person" (/app/models/person.php) Klasa kontrolera: "PeopleController" (/app/controllers/people_controller.php) widok /app/views/people/index.ctp

Kontroler (1) Klasa AppController zdefiniowana w /app/app_controller.php powinna zawierać metody wspólne dla wszystkich kontrolerów aplikacji <?php?> # /app/controllers/recipes_controller.php class RecipesController extends AppController { } function view($id) { } function share($customer_id, $recipe_id) { } function search($query) { }

Kontroler (2) Zdefiniowane atrybuty class RecipesController extends AppController { var $name = 'Recipes'; var $uses = array('recipe', 'User'); var $helpers = array('ajax'); var $components = array('email'); }

Kontroler (3) - dane $this->params['form'] $this->params['admin'] $this->params['bare'] $this->params['isajax'] $this->params['action'] $this->data

Kontroler(4) - metody set(string $var, mixed $value) render(string $action, string $layout, string $file) redirect(mixed $url, integer $status, boolean $exit) flash(string $message, string $url, integer $pause, string $layout) beforefilter() beforerender() afterfilter() string referer(mixed $default = null, boolean $local = false) loadmodel(string $modelclass, mixed $id)

Model(1) class Ingredient extends AppModel { } var $name = 'Ingredient'; class IngredientsController extends AppController { } function index() { $ingredients = $this->ingredent->find('all'); //$ingredients = $this->recipe->ingredient->find('all'); $this->set('ingredients', $ingredients); }

Model(2) find($type, $params) array( 'conditions' => array('model.field' => $thisvalue), 'recursive' => 1, //int 'fields' => array('model.field1', 'DISTINCT Model.field2'), 'order' => array('model.created', 'Model.field3 DESC'), 'group' => array('model.field'), 'limit' => n, //int 'page' => n, //int 'offset'=>n, //int 'callbacks' => true )

Model(3) zapisywanie danych W kontrolerze function edit($id) { if(!empty($this->data)) { if($this->recipe->save($this->data)) { $this->session->setflash("recipe Saved!"); $this->redirect('/recipes'); } } $this->data = $this->recipe->findbyid($id); }

Widok set() - analogiczna metoda jak dla kontrolera, umieszczenie zmiennej w viewvar (do wykorzystania dla elementów, które będą później renderowane, np. layoutu) getvar() - pobieranie zawartości zmiennej z viewvar error() - wyświetla błąd na stronie element() - wyświetla element, partial uuid() - generuje automatyczne ID dla danego elementu drzewa DOM

Nawigacja echo $html->link('view Post', array('controller' => 'posts', 'action' => 'index')) echo $this->html->link( ('TranslatedText', true), 'http://www.example.org')

I18n Internacjonalizacja strona w wielu językacj Wykorzystanie funkcji () w celu oznaczenia tekstu do tłumaczenia Stworzenie plików /app/locale/pol/lc_messages/default.po msgid token msgstr zamiennik Zmiana języków Configure::write('Config.language', 'pol'); // dla całej aplikacji $this->session->write('config.language', 'pol'); // dla użytkownika

Paginacja Kontroler var $paginate = array( 'limit' => 10); $data = $this->paginate('post'); $this->set('data', $data); Widok <?php echo $this->paginator->sort('title', 'title');?> <?php echo $this->paginator->numbers();?> <?php echo $this->paginator->prev('«previous', null, null, array('class' => 'disabled'));?> <?php echo $this->paginator->next('next»', null, null, array('class' => 'disabled'));?> <?php echo $this->paginator->counter();?>

Uwierzytelnianie var $components = array('auth', 'Session'); (AppController) Wykorzystanie ACO oraz ARO http://book.cakephp.org/view/1549/an- Automated-tool-for-creating- ACOs#!/view/1543/Simple-Acl-controlled- Application $this->session->read('auth.user')

Sesja - koszyk Utworzenie własnej klasy i umieszczenie jej w katalogu apps/vendors Przed wykorzystaniem import klasy dla danego kontrolera bądź dla całej aplikacji AppController w funkcji beforefilter() App::import('Vendor', 'Koszyk',array('file' => 'Koszyk.class.php')); Umieszczenie obiektu w sesji Pobranie obiektu z sesji $kosz = new Koszyk(); $this->session->write("koszyk.kosz",$kosz); <?php $kosz = $this->session->read("koszyk.kosz")?>

Sesja - koszyk <?php class Koszyk{ var $items = array(); public function drukuj(){ echo "Twój koszyk (".count($this->items).")";} public function pokaz(){foreach($this->items as $item){echo $item;}} public function add_to_cart($item){} public function rem_from_cart($item){} }?>

Flash Zmienne tymczasowe działające tylko w obrębie następnego żądania $this->session->setflash( ('Invalid post', true)) echo $this->session->flash('auth');

Pluginy www.cakedc.com komentarzy Wyszukiwania TinyMCE Tagi migracja