pawel.rajba@gmail.com, http://kursy24.eu/



Podobne dokumenty
Technologie internetowe ASP.NET Core. Paweł Rajba

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Laboratorium 6 Tworzenie bloga w Zend Framework

Program szkolenia: Symfony, nowoczesny framework PHP

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

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

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

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

WICKET VS. DJANGO. Leszek Gawron vs. Michał Leszczyński

Podstawy technologii WWW

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

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

Backend Administratora

Programowanie i projektowanie obiektowe

Zaawansowany kurs języka Python

Facelets ViewHandler

Programowanie w Ruby

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

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

Kurs rozszerzony języka Python

media Blitz wydajne sytemy szablonów

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

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład VII

KUP KSIĄŻKĘ NA: PRZYKŁADOWY ROZDZIAŁ KOMUNIKATY DLA UŻYTKOWNIKA

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

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

Aplikacje internetowe

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

Program szkolenia: REST i Microservices w PHP

Metaprogramowanie w Ruby

Quiz Aplikacja internetowa

Wprowadzenie do framework a Symfony

Baza danych do przechowywania użytkowników

Walidacja danych w ASP.NET MVC

Testowanie aplikacji. Kurs języka Ruby

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

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

Aplikacje WWW - laboratorium

Wykład 3 Inżynieria oprogramowania. Przykład 1 Bezpieczeństwo(2) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Podstawowe wykorzystanie Hibernate

REFERAT O PRACY DYPLOMOWEJ

Podstawy technologii WWW

Zaawansowane aplikacje internetowe laboratorium REST

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8.

AUDYT DOSTĘPNOŚCI STRONY INTERNETOWEJ

11. Autoryzacja użytkowników

Dokumentacja smsapi wersja 1.4

Podręcznik Integracji

Aplikacje WWW - laboratorium

Podstawy JavaScript ćwiczenia

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

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter


Wprowadzenie do Internetu Zajęcia 5

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Platforma e-learningowa

Laboratorium Kierunki Rozwoju oprogramowania REST, Django

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

PHP: bloki kodu, tablice, obiekty i formularze

Kontrola dostępu w ASP.NET

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Ajax. 1. Wprowadzenie. 2. Aplikacja serwerowa

Chatter Aplikacja internetowa

Programowanie zorientowane obiektowo. Mateusz Kołecki

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

Szczegółowy opis zamówienia:

Programowanie w Ruby

Wprowadzenie do Doctrine ORM

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

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

Plan. Raport. Tworzenie raportu z kreatora (1/3)

Podstawy (X)HTML i CSS

Programowanie MorphX Ax

Część 3 - Konfiguracja

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

Aplikacje www laboratorium

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

URL, URI różnice i podobieństwa

Kurs ASP.NET ASP.NET CORE APLIKACJE WEBOWE

Wczytywanie cenników z poziomu programu Norma EXPERT Tworzenie własnych cenników w programie Norma EXPERT... 4

Projektowani Systemów Inf.

Instrukcja laboratoryjna

KUP KSIĄŻKĘ NA: PRZYKŁADOWY ROZDZIAŁ KOMUNIKATY DLA UŻYTKOWNIKA I ROLE UŻYTKOWNIKÓW

Administracja i programowanie pod Microsoft SQL Server 2000

Laboratorium 7 Blog: dodawanie i edycja wpisów

Języki programowania wysokiego poziomu. Ćwiczenia

7. Formularze master-detail

Szkolenie wycofane z oferty

(Pluggable Authentication Modules). Wyjaśnienie technologii.

PROJEKTOWANIE APLIKACJI INTERNETOWYCH

Programowanie w Ruby

Swing Application Framework czyli tam i z powrotem. Copyright Piotr Kochański & Erudis,

WYKŁAD 1 ANGULARJS CZĘŚĆ 1

Transkrypt:

pawel.rajba@gmail.com, http://kursy24.eu/

Wprowadzenie, struktura Podstawy Twig Adres i nawigacja Request, Response i parametry Ciasta, sesje i flash messages Model i baza danych Formularze Security Ilustracje ze strony http://symfony.com/

Framework za free o ogromnej społeczności Obecnie dostępny w wersji 2 nowa jakość Oparty o PHP 5.3 (wersja minimalna) Wsparcie ze strony NetBeans i Eclipse Integracja z Doctrine i Twig Wsparcie w wielu obszarach np. świetne formularze z walidacją, uwierzytelnianie i autoryzacja, dostęp do danych, debug toolbar Wykorzystywany przez wiele dużych serwisów np. Yahoo

Do pobrania ze strony symfony.com wersje z vendors i bez vendors Struktura jak po prawej: Bundle plik app\appkernel.php Adnotacje Konsola: php app\console

review Uruchamiamy aplikację http://localhost/sf/review/web/app_dev.php/ http://localhost/sf/review/web/app.php/ Przechodzimy konfigurację (link configure) Uruchamiamy demo (Hello World) http://localhost/sf/web/app_dev.php/demo/hello/pawel Patrzymy gdzie są kontrolery i widoki Omówienie jak to z grubsza działa Oglądamy konsolę

Główne składowe Kontrolery folder src\<bundle>\controller Widoki (oparte o Twig) folder src\<bundle>\resources\views

Powiązanie kontrolera z widokiem: Podejście natywne: public function indexaction() { $response = $this-> render('sitebundle:default:index.txt.twig'); $response->headers-> set('content-type', 'text/plain'); return $response; } Wykorzystanie adnotacji /** * @Route("/hello/{name}", name="_demo_hello") * @Template() */ public function helloaction($name) { return array('name' => $name); }

Wyświetlenie zmiennej: {{ z }} {{ z.x }} {{ t['key'] }} {{ p.getname() }} Bloki: {% for i in tab %}<li>{{ i }}</li>{% endfor %} {% if count > 10 %}{{ pager }}{% endif %} Wstawianie assets <link href="{{ asset('css/blog.css') }}" rel="stylesheet" type="text/css" /> <img src="{{ asset('images/logo.png') }}" /> Wstawianie innego szablonu {% include 'SiteBundle:Helper:pager.html.twig with { 'parameters' : { 'count': 10 } } %} Strona domowa: http://twig.sensiolabs.org/ Twig będzie omawiany na kolejnych wykładach

Korzystając z możliwości Twig, budujemy strukturę opartą o szablony Plik widoku {# src/sitebundle/resources/views/demo/hello.html.twig #} {% extends "SiteBundle::layout.html.twig" %} {% block content %}<h1>hello {{ name }}!</h1>{% endblock %} Plik szablonu (layoutu) {# src/sitebundle/resources/views/layout.html.twig #} <!DOCTYPE html> <html> (...) <body> (...)<div class="content">{% block content %}{% endblock %}</div>(...) </body> </html>

Routing (mapowanie adresów) określamy W pliku app/config/routing[_dev].yml, przykład _default: pattern: / defaults: { _controller: SiteBundle:Default:index } Poprzez adnotacje, przykład @Route("/", name="_demo") a w pliku routing.yml skierowanie na kontroler(y) SiteBundle: resource: "@SiteBundle/Controller/" type: annotation prefix: / Większy przykład @Route("/zgloszenia/{page}", name="pages_zgloszenia", requirements = {"page" = "\d+"}, defaults = {"page" = 1})

Po stronie kontrolera mamy return $this->redirect( $this->generateurl('_demo_hello', array('name' => 'Lucas'))); $response = $this->forward( 'AcmeDemoBundle:Hello:fancy', array('name' => $name, 'color' => 'green')); Po stronie szablonu <a href=" {{ path('_demo_hello', { 'name': 'Thomas' }) }} ">Greet Thomas!</a> <a href=" {{ url('blog_show', { 'slug': 'my-blog-post' }) }} ">previous post</a>

layoutnavigation

Request obiekt żądania Dostęp: $this->getrequest() $request->isxmlhttprequest(); Czy AJAX? $request->get('page'); Parametr (get lub post) Response obiekt odpowiedzi Oglądamy metody w przykładzie Przegląd składowych podczas demonstracji

Przekazywanie parametrów: Definicja: # app/config/routing.yml hello: pattern: /hello/{first_name}/{last_name} defaults: { _controller: SiteBundle :Hello:index, color: green } Akcja public function indexaction($first_name, $last_name, $color) { //... }

Przekazywanie parametrów, uwagi: Kolejność parametrów nie ma znaczenia Rozpoznawanie po nazwie Metoda akcji nie musi mieć wszystkich parametrów Ale wszystkie przekazane parametry muszą być ujęte w definicji routingu, chociaż można dodawać dowolną liczbę parametrów domyślnych

Przekazywanie parametrów Albo po prostu: public function showaction(request $r) { } Tylko trzeba pamiętać, aby dodać: use Symfony\Component\HttpFoundation\Request;

request

Pobranie $ciacho = $this->getrequest() ->cookies->getint("ciacho", 0); Zapisanie Tradycyjnie setcookie("ciacho", $ciacho+1); Korzystając z obiektu response $response = new Response(); $response->headers->setcookie(new Cookie('ciacho', 100)); $response->setcontent($this->render( 'SimpleSiteBundle:Default:cookie.html.twig', $params)); return $response;

Obsługa sesji Pobranie $session = $this->getrequest()->getsession(); Zapisanie zmiennej $session->set('foo', 'bar'); Pobranie $foo = $session->get('foo'); Można także łatwo przechowywać sesje w bazie danych Zobaczymy na przykładzie, jak to zrobić

Flash messages Krótkie wiadomości tekstowe Widoczność do następnego żądania Zastosowanie: powiadomienia typu Dane zapisano, Błędny formularz Przykład: public function updateaction() { $form = $this->createform(...); $form->bindrequest($this->getrequest()); if ($form->isvalid()) { // do some sort of processing $this->get('session')->setflash('notice', 'Your changes were saved!'); return $this->redirect($this->generateurl(...)); } return $this->render(...); } {% if app.session.hasflash('notice') %} <div class="flash-notice">{{ app.session.flash('notice') }}</div> {% endif %}

cookiesession Przeglądamy DefaultController Oglądamy działanie flashmessages i sesji Przechodzimy do SessionController Na koniec oglądamy config.yml Więcej: http://symfony.com/doc/2.0/cookbook/configurati on/pdo_session_storage.html

Dostęp do bazy oparty na PDO i Doctrine Generatory modelu, CRUD i formularzy czyli łatwo lekko i przyjemnie

Kolejne kroki Tworzymy bazę danych z tabelami Tworzymy klasy.\php app/console doctrine:mapping:import SimpleSiteBundle annotation Tworzymy settery i gettery.\php app/console doctrine:generate:entities SimpleSiteBundle Niestety ręcznie dopisujemy relacje Możemy dodatkowo utworzyć prostą obsługę CRUD:.\php app/console doctrine:generate:crud -- entity="simplesitebundle:osoba" ---route-prefix="/osoba" -- with-write --format="annotation

database

Podstawy http://symfony.com/doc/current/book/doctrine.html Tworzenie encji na podstawie bazy danych http://symfony.com/doc/2.0/cookbook/doctrine/reverse_e ngineering.html

Pełna integracja z Twig Bardzo przejrzyste i eleganckie rozwiązanie Możliwość definicji formularzy Ad-hoc w kontrolerze Elegancko w osobnej klasie Definicja walidacji W encjach W klasie formularza niezależnie od modelu Mechanizm Form Theming

Przegląd kontrolek http://symfony.com/doc/2.0/reference/forms/types.html Przegląd walidatorów http://symfony.com/doc/2.0/reference/constraints.html Wprowadzenie do formularzy http://symfony.com/doc/2.0/book/forms.html

forms form1 form2 form3 form4 form5

Security to podsystem Symfony2 umożliwiający sterowanie dostępem Konfiguracja w app/config/security.yml Standardowo mamy dwa etapy

Przykładowe scenariusze sterowania dostępem: (1)

Przykładowe scenariusze sterowania dostępem: (2)

Przykładowe scenariusze sterowania dostępem: (3)

Przykładowe scenariusze sterowania dostępem: (4)

Podstawy zestaw, aby uruchomić security Definicja firewalla, czyli przede wszystkim Co jest zabezpieczone (wzorzec ścieżki, np. ^/) Mechanizm uwierzytelniania (np. form_login) Określenie dostawcy kont użytkowników Określenie sposobu kodowania haseł (np. plaintext) Określenie autoryzacji Do których ścieżek (np. ^/admin) Które role (np. ROLE_ADMIN)

Prosty przykład:

Uwierzytelnianie przez formularz HTML Tworzymy dwie ścieżki login formularz logowania (robimy sami) login_check weryfikacja tożsamości (automat) Do security.yml dopisujemy form_login: check_path: /login_check login_path: /login Tworzymy odpowiedni widok formularza i akcję kontrolera

Autoryzacja i role Dostęp jest określany na podstawie ról Definicje ról są w sekcji role_hierarchy Możemy mieć dziedziczenie ról Sterowanie dostępem jest w security.yml w sekcji access_control Lista ze ścieżkami i wymaganymi rolami Uwaga: brana jest pierwsza reguła, która się dopasuje

Sprawdzanie ról można zrobić również w kontrolerze:

security

Szyfrowanie haseł Mamy do dyspozycji przede wszystkim funkcje skrótu, np. sha1, sha512 (to jest wbudowane) Pełna lista jest zwracana przez funkcję hash_algos() Implementacja w klasie vendor\symfony\src\symfony\component\security\cor e\encoder\messagedigestpasswordencoder.php Można także zdefiniować szyfrowanie dowolne (np. symetryczne) Ale to trzeba zrobić ręcznie przez definicję usługi

Użytkownicy w bazie danych Tworzymy tabelkę w bazie danych Definiujemy encję opisującą użytkownika Jest to klasa implementująca Symfony\Component\Security\Core\User\UserInterface W security.yml dopisujemy providers: main: entity: { class: Simple\SiteBundle\Entity\User, property: username }

security2