Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć...

22

Transcript of Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć...

Page 1: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co
Page 2: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie,ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Opieka redakcyjna: Ewelina BurskaProjekt okładki: Studio Gravite/Olsztyn Obarek, Pokoński, Pazdrijowski, ZapruckiMateriały graficzne na okładce zostały wykorzystane za zgodą Shutterstock.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/zef3ppMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

ISBN: 978-83-283-3283-6

Copyright © Helion 2018

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

Spis tre ci

O autorze ...............................................................................................7

ROZDZIAŁ 1. Wprowadzenie .....................................................................................111.1. Czym jest Zend Framework? ........................................................................................ 111.2. Komponenty .................................................................................................................... 121.3. Dlaczego warto wybrać wersję 3.0? ................................................................................. 131.4. Co nowego w ZF3? ......................................................................................................... 131.5. Społeczność ..................................................................................................................... 141.6. Przykłady ......................................................................................................................... 15

ROZDZIAŁ 2. Instalacja ..............................................................................................172.1. Wymagane aplikacje ...................................................................................................... 172.2. Ustawianie środowiska pracy ....................................................................................... 182.3. Ściągnięcie szkieletu aplikacji ....................................................................................... 212.4. Konfiguracja Zenda ........................................................................................................ 22

ROZDZIAŁ 3. Struktura szkieletu aplikacji ...............................................................253.1. Pliki konfiguracyjne ....................................................................................................... 253.2. Zewnętrzne biblioteki .................................................................................................... 283.3. Konfiguracja modułów .................................................................................................. 303.4. W jaki sposób działa Zend 3? ........................................................................................ 32

ROZDZIAŁ 4. Prosta aplikacja i workflow .................................................................354.1. Wstępna konfiguracja .................................................................................................... 354.2. Modyfikacje w kontrolerze i widoku ................................................................................ 38

ROZDZIAŁ 5. Tworzenie nowego modu u ................................................................435.1. Dodanie przykładowego modułu ................................................................................. 435.2. Nowy formularz .............................................................................................................. 455.3. Dodawanie rekordów ..................................................................................................... 465.4. Edycja rekordu ................................................................................................................ 495.5. Usuwanie rekordu .......................................................................................................... 515.6. Dodanie modułu przez ZF2Rapid ................................................................................ 535.7. Co powinno się znajdować w module? ....................................................................... 53

Poleć książkęKup książkę

Page 4: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

4 S P I S T R E Ś C I

ROZDZIAŁ 6. MVC .....................................................................................................556.1. Model ................................................................................................................................ 556.2. Widok ............................................................................................................................... 586.3. Kontroler .......................................................................................................................... 616.4. Router ............................................................................................................................... 63

ROZDZIAŁ 7. Najwa niejsze komponenty ................................................................717.1. Event Manager ................................................................................................................ 717.2. Module Manager ............................................................................................................ 777.3. Service Manager .............................................................................................................. 797.4. Hydratory ........................................................................................................................ 87

ROZDZIAŁ 8. Bazy danych .........................................................................................918.1. Adaptery — MariaDB, MySQL, PostgreSQL itp. ...................................................... 918.2. Proste zapytania .............................................................................................................. 928.3. Zapytania CRUD ............................................................................................................ 958.4. Table Gateway ................................................................................................................. 978.5. Row Gateway ................................................................................................................... 99

ROZDZIAŁ 9. Szablony widoków .............................................................................1019.1. Domyślne widoki .......................................................................................................... 1019.2. Silniki szablonów — Smarty, Twig ............................................................................ 1049.3. Layouty i helpery .......................................................................................................... 109

ROZDZIAŁ 10. Formularze .........................................................................................11510.1. Generowanie ............................................................................................................... 11610.2. Walidacja ..................................................................................................................... 12110.3. Filtrowanie ................................................................................................................... 12510.4. Dekoratory ................................................................................................................... 12810.5. Wykończenie formularza użytkownika .................................................................. 129

ROZDZIAŁ 11. Tworzenie listy komiksów ze stronicowaniem ................................13711.1. Nowy kontroler ........................................................................................................... 13711.2. Nowy model ................................................................................................................ 13911.3. Nowy widok ................................................................................................................ 14411.4. Stronicowanie ............................................................................................................. 146

ROZDZIAŁ 12. Apigility ..............................................................................................15112.1. Ustawienie środowiska .............................................................................................. 15112.2. Graficzny panel administracyjny ............................................................................. 15512.3. Tworzenie serwisów RPC .......................................................................................... 15612.4. Tworzenie serwisów REST ........................................................................................ 16212.5. Zabezpieczenie serwisów ........................................................................................... 172

ROZDZIAŁ 13. Tworzenie dynamicznej sondy ..........................................................17713.1. Nowy kontroler ........................................................................................................... 17713.2. Nowa biblioteka .......................................................................................................... 18213.3. Nowe endpointy API ................................................................................................. 189

Poleć książkęKup książkę

Page 5: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

S P I S T R E Ś C I 5

ROZDZIAŁ 14. Rejestracja i logowanie .....................................................................19314.1. Rejestrowanie użytkowników ................................................................................... 19314.2. Logowanie .................................................................................................................... 20714.3. Sesja .............................................................................................................................. 211

ROZDZIAŁ 15. Tworzenie panelu administratora i CMS .........................................21715.1. Nowy moduł ................................................................................................................ 21715.2. Dostęp do panelu ........................................................................................................ 22415.3. CMS — system zarządzania treścią ........................................................................ 225

ROZDZIAŁ 16. Tworzenie systemu zarz dzaj cego dost pami u ytkowników .....23916.1. Podstawowe pojęcia ................................................................................................... 23916.2. Zabezpieczenia ............................................................................................................ 24016.3. Strategie ........................................................................................................................ 24416.4. Integracja systemu autoryzacji ................................................................................. 245

ROZDZIAŁ 17. Tworzenie modu u do debugowania i logów ...................................25117.1. Własny moduł debugowania .................................................................................... 25117.2. Obsługa błędów i biblioteka Whoops ..................................................................... 262

ROZDZIAŁ 18. Tworzenie obs ugi wielu j zyków .....................................................26918.1. Integracja obiektu MvcTranslate ............................................................................. 26918.2. Dostępne formaty translacji ...................................................................................... 27118.3. Dodatkowe klasy i metody lokalizacyjne ................................................................ 274

ROZDZIAŁ 19. Tworzenie formularzy opartych na strukturze BootstrapTwitterCSS ........................................................................................27919.1. Przygotowanie formularza i kontrolera .................................................................. 27919.2. Implementacja formularza w Bootstrap 3 ................................................................... 281

ROZDZIAŁ 20. Tworzenie w asnej nawigacji i sitemapy ...........................................29520.1. Przerobienie nawigacji ............................................................................................... 29520.2. Dodanie patchwaya i linków ..................................................................................... 30120.3. Dynamiczna sitemapa ................................................................................................ 303

ROZDZIAŁ 21. Tworzenie testów jednostkowych ....................................................30921.1. Ustawienie środowiska dla testów ........................................................................... 30921.2. Testowanie modeli Rowset i Fixtures ...................................................................... 31221.3. Testowanie z użyciem baz danych ........................................................................... 31921.4. Testy kontrolera i mocks ........................................................................................... 324

Skorowidz ...................................................................................................331

Poleć książkęKup książkę

Page 6: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

6 S P I S T R E Ś C I

Poleć książkęKup książkę

Page 7: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

ROZDZIAŁ 4.Prosta aplikacja i workflow

4.1. Wst pna konfiguracjaDomyślnie Zend przychodzi już z pierwszym modułem, o nazwie Application. Służy ongłównie do wyświetlenia statycznej strony informacyjnej z linkami do modułów doku-mentacji czy pomocy. Użyjemy tego właśnie modułu do modyfikacji kodu oraz wpro-wadzenia zmian, dzięki czemu poznamy sposób działania nowego Zend Framework.

Nasze założenie w tym rozdziale jest takie, aby zaimplementować użycie bazy danychMySQL, a następnie pobrać wartość konkretnego rekordu.

Zacznijmy od stworzenia w MySQL przykładowej tabeli users, która będzie miała3 kolumny: id, username i password. Możemy ją utworzyć przez phpMyAdmin dołą-czony do pakietu XAMPP bądź też bezpośrednio przez zapytanie SQL w wierszu po-leceń MySQL.

CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL, `username` varchar(100) NOT NULL, `password` char(128) NOT NULL) ENGINE=InnoDB

ALTER TABLE `users` ADD PRIMARY KEY (`id`);ALTER TABLE `users` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Następnie zaczniemy w głównym katalogu od modyfikacji konfiguracji naszej aplikacji.Do config/global.php dodajmy poniższy kod:

'db' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=zend3;host=localhost', 'driver_options' => array(

Poleć książkęKup książkę

Page 8: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

3 6 R O Z D Z I A Ł 4 .

PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' ) ), 'service_manager' => array( 'factories' => array( 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', ), )

natomiast do config/local.php.dist, który później zmieni się na local.php:

'db' => array( 'username' => 'root', 'password' => '' )

Teraz tylko włączamy tryb deweloperski w wierszu poleceń, aby nasze pliki .distsklonowały się do postaci .php:

composer development-enable

Wszystko, co powyżej robimy, prowadzi do ustawienia hasła i nazwy użytkownika donaszej domyślnej bazy danych w MySQL. Domyślnie w XAMPP-ie nazwa głównegoużytkownika to root, a hasło nie jest ustawione.

Tak jak w poprzednich wersja Zenda, aby połączyć się z jakąkolwiek bazą danych,musimy określić dane do połączenia. Domyślnie dla XAMPP-a host to localhost,a nazwa bazy to „zend3” (wewnątrz której już istnieje stworzona przez nas tabela o na-zwie users). Dalej w kluczu driver określamy typ bazy danych: dla MySQL domyślniejest ustawione Pdo. Dodatkowo określiliśmy tutaj typ kodowania znaków naszej bazy,czyli UTF-8; jeśli nie określimy w tym miejscu odpowiedniego kodowania, zamiastpolskich znaków zobaczymy śmieszne znaczki lub np. ??. Zwróć uwagę, że w global.phpnie ma informacji o nazwie użytkownika i haśle, dlatego że podany plik nie powinienzawierać żadnych poufnych informacji. Wszystkie podobne informacje konfiguracyjnepowinniśmy zamieszczać w local.php. Wynika to z systemu kontroli wersji, gdzieglobal.php jest wysyłany do repozytorium, a local.php dodawany do plików ignorowa-nych przez GIT. Dzięki temu nigdy „nie podzielisz się” swoimi prywatnymi hasłamiz innymi osobami, jeśli przez przypadek wyślesz coś na publiczny serwer kontroli wersji.

Oprócz danych do bazy dodajemy również rekord o nazwie service_manager, któryokreśla zależności naszego modułu od innych klas. Opcja factories oznacza, że bę-dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznietej samej klasy co w Zend 1). Zostanie ona utworzona z parametrem driveraZend\Db\ AdapterAdapterServiceFactory. Dzięki temu nie musimy się przejmowaćtworzeniem nowych obiektów Zenda w naszych kontrolerach czy modelach. Takaklasa będzie już dostępna do użycia w innych plikach konfiguracyjnych, o którychzaraz wspomnimy.

Następnym krokiem, do skonfigurowania tym razem samego modułu, jest dodanieponiższego kodu do module/Application/config/module.config.php:

Poleć książkęKup książkę

Page 9: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

P R O S T A A P L I K A C J A I W O R K F L O W 3 7

'controllers' => [ 'factories' => [ Controller\IndexController::class => function($sm) { $usersService = $sm->get('Application\Model\UsersTable');

return new Controller\IndexController($usersService); } ], ],

Klucz o nazwie controllers, jak sama nazwa wskazuje, określa wszystkie kontrolerydostępne w module. Ponieważ będziemy musieli pobrać i wyświetlić rekord z tabeliusers, musimy mieć dostęp do nowego modułu (nazwanego UsersTable). Przekazu-jemy więc obiekt naszego modelu $usersService przez konstruktor Application/src/Controller/IndexController.php. Jedyna „magia” w tym kodzie to pobranie UsersTableprzez $sm Service Managera, który jest zawsze dostępny jako pierwszy parametr,poprzez metodę get(). Oczywiście, obecnie Service Manager nie ma naszego modelu,który nawet jeszcze nie istnieje. Aby dodać naszą klasę do SM, potrzebujemy do-datkowego kodu w pliku module/Application/src/Module.php:

public function getServiceConfig(){ return array( 'factories' => array( 'UsersTableGateway' => function ($sm) { $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');

$resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new User()); return new TableGateway('users', $dbAdapter, null, $resultSetPrototype); }, 'Application\Model\UsersTable' => function($sm) { $tableGateway = $sm->get('UsersTableGateway'); $table = new UsersTable($tableGateway);

return $table; } ) );}

Jak możesz sam zauważyć, dodaliśmy do pliku Module nową metodę, getServiceCon-fig(), która określa dodatkową konfigurację naszych wewnętrznych komponentów,jak modele, formularze czy zwykłe obiekty.

Aby powyższa metoda zadziałała, musimy również dodać linki do klasy (tuż poddefinicją namespace), do której się odwołujemy:

use Application\Model\User;use Application\Model\UsersTable;use Zend\Db\ResultSet\ResultSet;use Zend\Db\TableGateway\TableGateway;

Poleć książkęKup książkę

Page 10: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

3 8 R O Z D Z I A Ł 4 .

Na początku definiujemy UsersTableGateway, która będzie obiektem zendowskimTableGateway nakierowanym na tabelę o nazwie users. Będzie on zwracał obiekty typuApplication/src/Model/User.php, w których umieścimy metody takie jak getId() czy ge-tUsername(). Zauważmy, że dzięki wcześniejszej deklaracji klasy Zend\Db\Adapter\Adapter w pliku config/global.php mamy tutaj od razu dostęp do instancji tej klasyprzez Service Managera.

Następnie konfigurujemy Application\Model\UsersTable poprzez pobranie właśniezdefiniowanego UsersTableGateway oraz zwrócenie obiektu klasy UsersTable. Terazwystarczy już stworzyć odpowiednie pliki i zmodyfikować kontroler.

4.2. Modyfikacje w kontrolerze i widokuZacznijmy może od dwóch nowych klas, User oraz UsersTable.

Pierwsza reprezentuje pojedynczy rekord w bazie. Jeśli więc nasza tabela składa sięz 3 kolumn, to powinniśmy mieć przynajmniej 3 metody: getId(), getUsername(), getPassword() plus dodatkowa metoda exchangeArray($row), która przekonwertuje

zwróconą tablicę asocjacyjną na zmienne klasowe. Klasa User z pliku Application/src/Model/User.php wygląda następująco:

namespace Application\Model;

class User{ public $id; public $username; public $password;

public function exchangeArray($row) { $this->id = (!empty($row['id'])) ? $row['id'] : null; $this->username = (!empty($row['username'])) ? $row['username'] : null; $this->password = (!empty($row['password'])) ? $row['password'] : null; }

public function getId() { return $this->id; }

public function getUsername() { return $this->username; }

public function getPassword() { return $this->password; }}

Poleć książkęKup książkę

Page 11: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

P R O S T A A P L I K A C J A I W O R K F L O W 3 9

Stwórzmy jeszcze plik klasy UsersTable.php, który zapiszemy w tym samym miejscuco User.php.

namespace Application\Model;

use Zend\Db\TableGateway\TableGateway;

class UsersTable{ public function __construct(TableGateway $tableGateway) { $this->tableGateway = $tableGateway; }

public function getById($id) { $id = (int) $id; $rowset = $this->tableGateway->select(array('id' => $id)); $row = $rowset->current();

if (!$row) { throw new \Exception('nie znaleziono u ytkownika o id: '.$id); } return $row; }}

UsersTable to nasz model, który odpowiada za komunikację z bazą danych. W tej klasiemoże mieć wszystkie operacje CRUD, takie jak create(), replace(), update() czydelete(), oraz — tak jak w powyższym przykładzie — getById(), getByUsername() i takdalej. Jeśli pamiętasz plik Module.php, to pewnie już wiesz, że konstruktor w tej klasieoczekuje obiektu typu TableGateway. Dla przypomnienia:

$table = new UsersTable($tableGateway);

W taki bowiem sposób stworzyliśmy obiekt, który jest odbieralny w __construct().

Wewnątrz jedynej metody getById() przekazujemy numer id, jakiego rekordu poszu-kujemy. Reszta to już zwykłe użycie Zend Db, z którego wywołujemy metodę select()z parametrem id. Dzięki $rowset->current() pobieramy pierwszy wynik zapytania.Jeśli jest on pusty, wyrzucamy wyjątek, w przeciwnym razie zwracamy pojedynczyobiekt typu Application\Model\User.

Przejdźmy teraz do kontrolera IndexController. Należałoby połączyć go z modelemoraz widokiem, w którym wyświetlimy dane o użytkowniku; wygląda on następująco:

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;use Zend\View\Model\ViewModel;use Application\Model\UsersTable;

class IndexController extends AbstractActionController{

Poleć książkęKup książkę

Page 12: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

4 0 R O Z D Z I A Ł 4 .

private $usersTable = null; public function __construct(UsersTable $usersTable) { $this->usersTable = $usersTable; }

public function indexAction() { $view = new ViewModel(); $model = $this->usersTable; $row = $model->getById(1);

$view->setVariable('id', $row->getId()); $view->setVariable('username', $row->getUsername()); $view->setVariable('password', $row->getPassword());

return $view; }}

Pierwszą rzeczą, jaką wykonujemy, jest definicja klasowej zmiennej naszego modelu$userTable, którą otrzymamy w konstruktorze kontrolera. Dalej modyfikujemy metodęindexAction(), która teraz wywoła metodę getById() z UsersTable z parametrem 1.W tym momencie powinniśmy dodać jeden rekord w bazie MySQL, w tabeli o nazwieusers: wpis z numerem identyfikacyjnym ID = 1 i jakimiś wstępnymi danymi. W moimprzypadku zrzut danych tabeli users wygląda następująco:

Rysunek 4.1.

Wracając do kontrolera, wywołujemy funkcję setVariable() z obiektu new ViewModel(),która wyśle nam jedną zmienną do pliku widoku index.phtml. Metoda ta przyjmujenajpierw nazwę zmiennej w widoku, a później samą zmienną. Zmienna $row, którazostaje zwrócona przez getById(), jest naszym obiektem Application\Model\User.

Poleć książkęKup książkę

Page 13: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

P R O S T A A P L I K A C J A I W O R K F L O W 4 1

Dzięki temu jesteśmy w stanie wywołać jej metody, takie jak getId() czy getUsername().Powtarzamy analogicznie pierwszą linię z id dla username oraz password.

Ostatnie zadanie to wyświetlenie danych o użytkowniku w widoku Application/view/application/index/index.phtml:

<div class="jumbotron"> <h1><span class="zf-green">Zend Framework 3</span></h1> <p> Znaleziony u ytkownik:<br /><br /> Id: <?php echo $id; ?><br /> Username: <?php echo $username; ?><br /> Password: <?php echo $password; ?> </p></div>

Możesz tutaj swobodnie zignorować znaczniki kodu HTML; interesują nas jedyniezapiski typu <?php echo $username; ?>. Są to nazwy kluczy, które przekazaliśmyw kontrolerze.

Jeśli wszystko dobrze wykonałeś, Twoim oczom powinna ukazać się poniższa stronabez jakichkolwiek błędów.

Rysunek 4.2.

Poleć książkęKup książkę

Page 14: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

4 2 R O Z D Z I A Ł 4 .

Poleć książkęKup książkę

Page 15: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

Skorowidz

AActive Record, 99adapter, 91, 98

autoryzacyjny, 246bazy danych, 203, 322budowa, 92DB, 246

administrator, 239, 241panel, 217

dostęp, 224widok, 217, 221

adresUri, 125URL, 120, 140, 240, 303WWW, 151

algorytmMD5, 195SHA1, 195SHA2, 195

Apigility, 151dokumentacja, 152konfiguracja, 151, 152, 153,

154UI, 152

aplikacjadebugowanie, Patrz:

debugowaniemobilna, 151NodeJS, Patrz: NodeJStestowanie, Patrz: test

architekturaMOVE, Patrz: MOVEMVC, Patrz: MVC

atakCSRF, 120SQL injections, 93

autoryzacja, 194, 239, 240,Patrz też: zabezpieczenie

Http Basic Authorisation,172

integracja, 245, 246przekazywanie, 243typ, 173, 174

Bbaza danych

adapter, 203, 322kodowanie, 36Maria DB, 91oparta na RDMS, 252połączenie, 36rekord, 124

dodawanie, 46, 57, 95edycja, 49, 50, 57, 95usuwanie, 51, 95, 97zastępowanie, 95

testowych, 318wzorzec tabel, 97zarządzanie, 43

bibliotekaBjyAuthorize, 239Bootstrap, 279, 287DivixUtils, 179, 181, 182PHPUnit, 309Prophecy, 327

punkt startowy, 54Redistribution package, 18Whoops, 265zewnętrzna, 29ZF Development Mode,

152ZFC RBAC, 239

konfiguracja, 245strategia, Patrz: strategia

błąd, 253, 260, 261, 263, 265404, 262, 263500, 262komunikat, 265

breadcrumbs, Patrz: patchway

CCAPTCHA, 120checkbox, 119ChromePHP, 252ciąg znaków, 125, 127CKEditor, 217CMS, 225Composer, 20, 28Container, Patrz: pojemnikCRUD, 95, 228

Ddata, 120, 124debugowanie, 251, 254, 260

błąd, 260, 261dekorator, 128, 129

Poleć książkęKup książkę

Page 16: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

3 3 2 S K O R O W I D Z

Eedytor programisty, Patrz: IDEemail, 120, 251endpoint, 151, 155

REST, Patrz: RESTRPC, Patrz: RPCtestowanie, 160

eventdispatch, 110renderer, 110response, 110

Ffabryka, 115fieldset, 115, 117, 123, 203filtr, 125, 127, 252, 253FirePHP, 252, 253Fixture, 318format

.phtml, 101CSV, 151GetText, 271, 272INI, 271JSON, 26, 151, 177XML, 26, 151, 253

formater, 253formularz, 37, 111, 115, 129,

199, 203, 279, 281atrybut, 46, 48błąd, 222, 286, 287dekorator, Patrz: dekoratorfiltrowanie, Patrz: filtrimplementacja w Bootstrap,

281kod HTML, 284struktura, 128tworzenie, 45, 115, 116walidacja, 118, 121, 123, 125,

205wyświetlanie, 48

funkcja, Patrz też: metodahaszująca, 194parametryzacja, 54

GGIT, 153gość, 240, 245, 300Gravatar, 111

Hhasło, 120, 195

haszowanie, 195sól, 195, 196, 200

helper, 45CurrencyFormat, 274, 275

HTML, 111HTTPie, 160hydrator, 48, 115, 162, 199, 200

IIBAN, 124IDE, 17ISBN, 124

Kkarta kredytowa, 124klasa dynamiczna, 59klucz

adapter, 143charset, 59, 92controller_plugins, 30controllers, 30, 37, 303Database, 92default, 298driver, 36Driver, 92factories, 282, 299filters, 30, 31font, 202form_elements, 30, 31height, 203hostname, 92http-equiv, 59hydrators, 30imgDir, 203imgUrl, 203input_filters, 30, 31invokable, 31

itemprop, 59lineNoiseLevel, 203log_processors, 30log_writers, 30name, 59navigation, 296Password, 92plugins, 143port, 92property, 59redirect_when_connected,

245route, 66, 298route_manager, 30router, 63serializers, 30service_manager, 30services, 31timeout, 202translate, 271uri, 298Username, 92validators, 30view_helpers, 30, 270width, 203wordLen, 202

kod kreskowy, 124komenda composer update, 28kontroler, 37, 40, 50, 61

ciężki, 54IndexController, 39lekki, 54tworzenie, 43, 44

Llayout, 109lista rozwijana, 119, 147

Mmanager

ControllerManager, 30ControllerPluginManager,

30FilterManager, 30FormElementManager, 30HydratorManager, 30

Poleć książkęKup książkę

Page 17: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

S K O R O W I D Z 3 3 3

InputFilterManager, 30LogProcessorManager, 30LogWriterManager, 30RoutePluginManager, 30SerializerAdapterManager,

30ServiceLocator, 30ValidatorManager, 30ViewHelperManager, 30

Memecache, 13menu

główne, 295pojemnik główny, 299poziom zagnieżdżenia, 299

metadane, 111, 228metoda

__call, 59__invoke, 59, 125_initFrontController, 63addChild, 102addContent, 228addLangContent, 228addMetadata, 228addPage, 228addProcessor, 252addWriter, 252append, 60appendName, 59assertQuery, 325assertQueryContentContains,

325assertQueryCount, 325assertXpathQueryCount,

325assignContentToPage, 228authenticate, 196, 209between, 97bind, 133bootstrapForm, 283buildSqlString, 94captureEnd, 61, 113captureStart, 61, 113column, 95configureServiceManager,

326contentSent, 62delete, 55, 97, 99, 100deleteContent, 228

deletePage, 228deleteRow, 57deleteWith, 55detectVersion, 62dispatch, 61, 325, 326displayMessages, 254dump, 254, 257, 258, 261equalTo, 96escapeCss, 103escapeHtml, 103escapeHtmlAttr, 103escapeJs, 103escapeUrl, 103exchangeArray, 47execute, 93, 126executeDelete, 260executeInsert, 260executeUpdate, 260expression, 97extract, 200fetch, 93fetchAll, 92, 141, 143fetchOne, 92fetchRow, 141filter, 125, 126formElementError, 128formInput, 128formRow, 128from, 93, 94, 97generatePassword, 196get_object_vars, 142getAllContentsByPageID,

230getArrayCopy, 57getArticleContentByPage

Name, 230getArticleContentByUrl, 230getAutoloaderConfig, 219getavatarUrl, 56getBy, 131getByUserId, 131getConfig, 219getControllerConfig, 30getControllerPluginConfig,

30getCookie, 62getEvent, 61getEventManager, 61

getFiles, 62getFilterConfig, 30getForm, 188getFormElementConfig, 30getHeaders, 62getHydratorConfig, 30getInputFilter, 49getInputFilterConfig, 30getInputFilterSpecification,

280getLanguageList, 231getLogProcessorConfig, 30getLogWriterConfig, 30getLongMessage, 254getMediumMessage, 254getMessage, 188getPage, 228getPages, 228getPassword, 113getPluginManager, 61, 126getPost, 62getQuery, 62getRealm, 113getRequest, 61getResponse, 61getRoles, 247, 248getRouteConfig, 30getSerializerConfig, 30getServiceConfig, 30, 31getSqlString, 260getStaticContentByPageNa

me, 230getTable, 97getUploadedImages, 56getUsername, 113getValidatorConfig, 30getVersion, 62getView, 111getViewHelperConfig, 30greaterThan, 96greaterThanOrEqual, 96headersSent, 62headScript, 60htmlify, 301htpasswd, 173hydrate, 200identity, 113in, 97

Poleć książkęKup książkę

Page 18: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

3 3 4 S K O R O W I D Z

metodainit, 177inlineScript, 60insert, 97, 99invoke, 283, 285isActive, 300isContentExists, 228isDelete, 62isFlashRequest, 62isGet, 62isNotNull, 97isNull, 97isPageExists, 228isPost, 62isPut, 62isValid, 122, 124isXmlHttpRequest, 62join, 94json_encode, 142lessThan, 96lessThanOrEqual, 96like, 96limit, 95literal, 96log, 251mockUsersTable, 327nest, 96notBetween, 97notEqualTo, 96notIn, 97notLike, 96offset, 95offsetGetName, 59offsetSet, 60onBoostrap, 244onBootstrap, 211, 220onDispatch, 61, 224onError, 244order, 95phpunit, 314populateValues, 133POST, 46predicate, 97prepareStatementForSql

Object, 94prepend, 60previewAction, 233prophesize, 327query, 93

render, 112, 284, 285, 291save, 55, 99, 100saveRow, 57seecontentsAction, 233select, 55, 93, 97, 98selectWith, 55, 260send, 62sendContent, 62sendHeaders, 62serialize, 143set, 60setAllowOverride, 326setAttribute, 46, 48setData, 47setEventManager, 61, 178setFormatter, 252setIdentifier, 254setInputFilters, 47setMaxDepth, 299setMessageCloseString, 223setMessageOpenFormat, 222setPartial, 300setPluginManager, 126setTemplate, 102setTerminal, 103setUiClass, 299setup, 314setView, 111sha512, 196, 200spl_object_hash, 142start, 213stripslashes, 231unnest, 96update, 55, 97, 99updateMetadata, 228updatePage, 228updateWith, 55values, 95where, 94, 96, 97, 141, 228

mock, 322, 324, 325, 326, 327model, 37, 39, 55, 139

ciężki, 54lekki, 54

MongDB, 253MongoDB, 252MOVE, 32MVC, 32, 61, 111, 240MySQL Workbench, 17

Nnarzędzie

bower, 153grunt, 153

nawigacja, 295link HTML, 302patchway, Patrz: patchwaypomocnicza, 299pozycja aktywna, 296, 300priorytet, 307skalowalność, 296

NPM, 152numer IP, 124

Oobraz, 120

Ppage, Patrz: stronapaginacja, Patrz: widok paginacjipatchway, 301plik

.phtml, 101404.phtml, 262, 263application.tests.config.php,

319composer.json, 28, 310config/global.php, 35config/local.php.dist, 36config/Module.config.php,

30CSS, 111, 152delete.phtml, 51edit.phtml, 49format, Patrz: formatglobal.php, 295, 296, 299, 310INI, 272JS, 152konfiguracyjny, 25, 27layout.phtml, 296local.php, 36MO, 273module.config.php, 63, 131,

271modules.config.php, 151

Poleć książkęKup książkę

Page 19: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

S K O R O W I D Z 3 3 5

phpunit.xml, 310phpunit.xml.dist, 310PO, 272POT, 272public/index.php, 32szablonu, 104szablonu tłumaczeń,

Patrz: plik POTwidoku, 40, 47, 49, 102XML, 303zfc_rbac.global.php.dist, 245

pojemnik, 295, 300domyślny, 298główny, 299

poletekstowe, 120wyszukiwania, 120

polityka zabezpieczeń, 240Postman Launcher, 154, 160Protection Policy, Patrz:

polityka zabezpieczeńprzycisk, 120

RRBAC, 239, 247

strategia, Patrz: strategiatyp używania, 240

refaktoryzacja, 54reguła

dodawanie, 63zarządzanie, 64

REST, 155autoryzacja, 172, 173, 174tworzenie, 162, 163, 166

RESTClient, 160router, 63

Hostname, 65Literal, 66logowania, 207Method, 67Regex, 67Scheme, 68Segment, 68

RPC, 155opcje, 161testowanie, 160, 161tworzenie, 156, 157, 158, 189

Sserwer, 124silnik szablonów, 104, 107Smarty, 104, 106, 113sonda, 180, 183

aktywna, 187głosowanie, 188lista, 186

standard RFC-3164, 252strategia przekierowania, 244

RedirectStrategy, 244, 246,247

UnauthorizedStrategy, 244,245

strona, 295mapy, 303podstrona, 298

strumień danych PHP, 252Syslog, 252system

CMS, Patrz: CMSdebugowania, Patrz:

debugowanietranslacji tekstów, 269, 270,

272format, 271plugin, 274, 275, 276, 277

szyfrowanie jednostronne, 195

ścieżkaabsolutna, 127bazowa, 56, 58

Ttabela, 35, 97tag HTML, 111Template Engine, Patrz: silnik

szablonówtest, 309

aktualizacji użytkownika, 329funkcyjny, 322imitowanie zależności, 324integracyjny, 322jednostkowy, 309, 310, 321modelu

Fixtures, 312, 317, 318Rowset, 312, 313, 314,

316, 317parametry, 317uruchamianie, 311usunięcia użytkownika, 330z użyciem baz danych, 319

translator, 269, 270, 271, 272dat, 274, 276liczby mnogie dla

określonego języka, 274,277

walut, 274, 275trigger, 54Twig, 107, 108, 113

Uużytkownik, 113, 199

administrator, Patrz:administrator

edytor, 239gość, Patrz: gośćhasło, Patrz: hasłologowanie, 207, 210ranga

admin, 241tworzenie, 245

rejestrowanie, 193sesja, 211, 212, 214, 223zalogowany, 244, 247, 300

Vview helper, 128, 129

Wwalidator, 124, 125warstwa

API, Patrz: Apigilitykontrolera, Patrz: kontrolermodelu, Patrz: modelwidoku, Patrz: widok

wiadomość, 112widok, 39, 44, 58, 102, 111

definicja układu, Patrz:layout

klasa pomocnicza, 279, 283

Poleć książkęKup książkę

Page 20: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co

3 3 6 S K O R O W I D Z

warstwapaginacji, 146, 147, 149

link, 148panelu administratora, Patrz:

administrator panel widokszablon, 101tworzenie, 144

wiersz poleceń, 152wyrażenie regularne, 67, 125

XXAMPP, 20, 193, 266

instalowanie, 18

Zzabezpieczenie, 240

ControllerGuard, 242, 243ControllerPermissionsGuard,

242RouteGuard, 240RoutePermissionGuard, 241,

243zapytanie, 62, 92, 154

adres, 162AJAX, 151, 181CRUD, 95DELETE, 163GET, 155, 163mapowanie, 65parametr, 93, 141PATCH, 163POST, 155przekierowanie, 64

PUT, 155, 163SELECT, 260typ, 155

zdarzenieEVENT_DISPATCH_ERROR,244

Zendinstalowanie, 21komponent, 11konfiguracja, 22, 25, 35

dodawanie, 26moduł, 30

plik konfiguracyjny, Patrz:plik konfiguracyjny

plugin, 11społeczność, 14tryb deweloperski, 25walidator, 124, 125wersja, 13

Zend ACL, 239Zend Authentication, 12Zend Captcha, 193Zend Certified Engineer, 14Zend Code, 154Zend Config, 12Zend Crypt, 12Zend Debug, 254Zend Dom, 325Zend DOM, 12Zend Event Manager, 12, 62, 178

instancja, 61Zend File, 12Zend Filter, 154Zwnd FlashMessenger, 222Zend Form, 115, 120

Zend Framework, Patrz: ZendZend Hydrator, 154Zend InputFilter, 154Zend Log, 251Zend Mail, 12Zend Module Manager, 13Zend Monitor, 252Zend MVC, 12Zend MVC-i18n integration,

12, 269Zend Navigation, 295, 301, 302Zend Paginator, 139Zend Plugin Manager, 111,

112, 113Zend Router, 32Zend Row Gateway, 99Zend Serializer, 139Zend Service Manager, 12, 13,

32, 56, 243Zend SQL Abstraction, 93Zend Table Gateway, 97Zend Toolbar, 12Zend Validator, 12, 154Zend View, 12, 101, 103, 105,

113Zend Xml2Json, 177, 186ZendApplication, 35ZF2Rapid, 53ZFC Admin, 217ZFTool, 53

żądanie nieautoryzowane, 244

Poleć książkęKup książkę

Page 22: Projekt okładki: Studio Gravite/Olsztyn ul. Kościuszki 1c, 44-100 …€¦ · dziemy tworzyć nową instancję klasy Zend\Db\Adapter\Adapter (czyli praktycznie tej samej klasy co