abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 23:44 | Komunita

Společnost Psyonix, v květnu 2019 koupena společností Epic Games, oznámila konec podpory počítačové hry Rocket League na Linuxu a macOS. Poslední aktualizace pro tyto operační systémy vyjde v březnu a odstraní možnost hrát tento automobilový fotbal online.

Ladislav Hagara | Komentářů: 1
včera 14:33 | Zajímavý článek

Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 89 (pdf), HackSpace 26 (pdf) a 27 (pdf) a Wireframe 28 (pdf), 29 (pdf) a 30 (pdf).

Ladislav Hagara | Komentářů: 0
včera 14:11 | Nová verze

Byla vydána nová verze 12.7 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu.

Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý článek

Michael Stapelberg na svém blogu popisuje projekt minitrd, který je součástí linuxové distribuce distri. Jedná se o implementaci initramfs v programovacím jazyce Go. V článku popisuje jak funguje a srovnává časy sestavení pomocí dracutu a dobu bootování. Pro zrychlení používá různé triky jako například pigz místo gzipu.

joejoe | Komentářů: 8
22.1. 21:33 | Nová verze

Sway, dlaždicový (tiling) správce oken pro Wayland kompatibilní s i3, byl vydán ve verzi 1.4. Do vývoje se zapojilo 52 vývojářů. Přehled novinek na GitHubu. Zdůraznit lze podporu VNC (wayvnc) nebo částečnou podporu Mate panelu.

Ladislav Hagara | Komentářů: 8
22.1. 19:55 | Nová verze

Dokumentační tým LibreOffice vydává aktualizovanou příručku pro LibreOffice Math pro verzi LibreOffice 6.4. Update příručky provedl ruský dobrovolník Roman Kuzněcov. Český překladatelský tým hledá další překladatele pro překlad příruček, detaily na wiki.

Zdeněk Crhonek | Komentářů: 0
22.1. 19:00 | Zajímavý projekt

CutiePi Shell (GitHub) je nové open source uživatelské rozhraní pro mobilní zařízení vytvořené pro tablet CutiePi postavený na Raspberry Pi.

joejoe | Komentářů: 1
22.1. 11:44 | Nová verze

Vyšla nová verze nástroje pro správu diskových oddílů GParted a distribuce GParted Live, která obsahuje tento a další nástroje pro zálohování či obnovu dat. GParted 1.1.0 aktualizuje překlady a opravuje chyby včetně v např. přesunu uzamknutých šifrovaných oddílů LUKS, výpočtu velikosti souborového systému JFS či rozpoznávání členů ATARAID a jejich stavu. GParted Live 1.1.0-1 pak obsahuje novou verzi GParted, Linux 5.4.13 a vůbec novější balíčky z Debianu Sid.

Fluttershy, yay! | Komentářů: 1
22.1. 09:55 | Zajímavý článek

Jiří Eischmann se v příspěvku /e/: Android bez Googlu na starém telefonu na svém blogu podělil o zkušenosti s mobilním operačním systémem /e/ (Wikipedie) na telefonu Samsung Galaxy S4 Mini: Pokud hledáte pro svůj androidí telefon systém bez závislosti na Googlu, je to asi ta nejlepší volba.

Ladislav Hagara | Komentářů: 15
21.1. 18:55 | Nová verze

Po roce vývoje od vydání verze 4.0 a více než 7 400 změnách byla vydána nová stabilní verze 5.0 softwaru, který vytváří aplikační rozhraní umožňující chod aplikací pro Microsoft Windows také pod GNU/Linuxem, Wine (Wikipedie). Z novinek lze zdůraznit moduly ve formátu PE, podporu více monitorů, reimplementaci XAudio2 anebo podporu Vulkanu 1.1. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 2
Zdají se vám sny s IT tématikou?
 (9%)
 (1%)
 (13%)
 (17%)
 (53%)
 (7%)
Celkem 257 hlasů
 Komentářů: 10, poslední 18.1. 16:18
Rozcestník

www.AutoDoc.Cz

CakePHP: tvoríme CMS - 6 (admin rozhranie)

29. 1. 2009 | Tibor Piňo | Programování | 6112×

V predchádzajúcich častiach sme vytvorili takmer funkčnú aplikáciu. Naša aplikácia však stále nedisponuje admin rozhraním. V tejto časti seriálu si ukážeme možnosti tvorby admin rozhrania a taktiež si ukážeme, jednoduchý spôsob prihlasovania užívateľov k takémuto rozhraniu.

Admin rozhraním disponuje v súčasnosti každá väčšia web aplikácia, a keďže v našom seriáli tvoríme CMS, nebude tomu inak ani u nás.

V CakePHP máme v podstate dve možnosti, ktorými môžeme vytvoriť admin rozhranie pre našu aplikáciu. Jednou z možností je vytvoriť admin rozhranie ako samostatnú aplikáciu, druhou možnosťou je použiť predpripravené riešenie, ktoré ponúka CakePHP.

Admin rozhranie ako samostatná aplikácia

Najprv si poďme predstaviť riešenie, kde bude admin rozhranie fungovať ako samostatná aplikácia. V rámci nášho projektu si vytvoríme novú aplikáciu, ktorú nazveme admin (novú aplikáciu môžeme vytvoriť pomocou dostupných konzolových nástrojov v CakePHP alebo skopírovaním obsahu adresára app do adresára admin). Adresárová štruktúra projektu po vytvorení novej aplikácie admin by mohla vypadať následovne

/web
|_ admin
   |_ webroot
   |_ controllers
   |_ views
   |_ models
   |_ ...
|_ app
   |_ webroot
   |_ controllers
   |_ views
   |_ models
   |_ ...
|_ cake

Predstavme si, že adresár web je koreňový adresár našej web aplikácie a adresár admin je naša nová aplikácia v rámci nášho projektu s kompletnou stromovou štruktúrou CakePHP aplikácie. Keďže sa v našom adresári admin nachádza kompletná CakePHP aplikácia, ktorá nám môže slúžiť ako admin rozhranie, môžeme k nej pristupovať prostredníctvom adresy http:example.com/ad­min/* //

Ako už určite tušíte, takýto prístup má jednú veľkú nevýhodu, a tou je fakt, že sa jedná o samostatnú aplikáciu. Tým, že máme vytvorenú samostatnú aplikáciu pre náš frontend a samostatnú aplikáciu pre admin rozhranie, nebudeme môcť medzi týmito aplikáciami zdieľať žiadne komponenty, helpery atď.

Tento spôsob tvorby admin rozhrania by som neodporúčal, pretože nedodržuje pravidlo DRY a veľa rovnakého kódu budete musieť písať a upravovať na dvoch miestach osobitne; tak ako vo frontende, tak i v admin aplikácii.

Admin rozhranie s pomocou CakePHP

Druhý spôsob, oveľa jednoduchší a inteligentnejší, je využiť riešenie, ktoré nám priamo ponúka CakePHP. Základom tohto riešenia je nastaviť admin routovanie v súbore app/config/co­re.php odkomentovaním ri­adku následovne

Configure::write('Routing.admin', 'admin');

Týmto sme dali CakePHP najavo, že za adresou http:example.com/ad­min// sa bude skrývať naše admin rozhranie. Od tejto chvíle bude CakePHP automaticky rozpoznávať akcie v controlleri a k nim príslušné view podľa predpony admin_.

Pozrime sa radšej na konkrétny príklad a poďme si teda doplniť našu aplikáciu o potrebné admin rozhranie. Pre názornosť si uveďme skrátený výpis zdrojového kódu ArticlesContro­ller v súbore app/controller­s/articles_con­troller.php (kompletné zdrojové kódy nájdete v prílohe k článku).

<?php
class ArticlesController extends AppController {

        var $name = 'Articles';
        var $helpers = array('Html', 'Form');

        function view($id = null) {
                if (!$id) {
                        $this->Session->setFlash(__('Invalid Article.', true));
                        $this->redirect(array('action'=>'index'));
                }
                $this->set('article', $this->Article->read(null, $id));
        }

        function admin_add() {
                if (!empty($this->data)) {
                        $this->Article->create();
                        if ($this->Article->save($this->data)) {
                                $this->Session->setFlash(__('The Article has been saved', true));
                                $this->redirect(array('action'=>'index'));
                        } else {
                                $this->Session->setFlash(__('The Article could not be saved. Please, try again.', true));
                        }
                }
                $tags = $this->Article->Tag->find('list');
                $users = $this->Article->User->find('list');
                $this->set(compact('tags', 'users'));
        }

}
?>

V našom controlleri máme dve akcie, jedna z nich je pomenovaná view a druhá admin_add. Rozdiel medzi týmito akciami je v spôsobe prístupu k nim. Kým k akcii view pristupuje cez URL tak, ako sme zvyknutý napr. example.com/ar­ticles/view/10, ku akcii admin_add pristupujeme cez URL example.com/ad­min/articles/add

Nesmieme však zabudnúť na správne pomenovanie view súborov. Kedže každá akcia v controlleri je automaticky zviazaná s príslušným view súborom, vyššie spomenuté konvencie musíme dodržiavať aj pri view súboroch. Pozrime sa, ako by vyzerala adresárová štruktúra nášho príkladu:

/web
|_ app
   |_ controllers
      |_ articles_controller.php
   |_ views
      |_ articles
         |_ view.ctp
         |_ admin_add.ctp
   |_ models
   |_ ...

Teraz nám je jasné, že ak vytvárame admin akciu v controlleri, musíme k nej vytvoriť aj admin view s rovnakým prefixom, a to admin_. Síce už vieme úspešne vytvoriť admin rozhranie, avšak doposiaľ sme nijakým spôsobom nekontrolovali prístup k admin rozhraniu. A keďže určite nechceme admin rozhranie sprístupniť každému, poďme sa teda pozrieť, aké možnosti nám ponúka CakePHP.

Autentizácia

O autentizáciu sa v CakePHP stará komponenta „AuthComponent“:http://api.cakephp.org/…mponent.html. Táto komponenta disponuje množstvom užitočných metód a my sa na ne pozrieme priamo v našom ukážkovom príklade.

Našou úlohou bude, aby k našim admin akciám mal prístup len prihlásený užívateľ (keďže je náš systém veľmi jednoduchý, nebudeme riešiť žiadnu autorizáciu užívateľov a vystačíme si len s prihlasovaním užívateľov). Tzn. že pre vstup do admin rozhrania nám bude stačiť úspešné overenie mena a hesla.

Nastavenie Auth komponenty

Prvým krokom je nastavenie databázovej tabuľky. Tabuľku v databáze nazveme users (my už ju máme z predchádzajúcich častí vytvorenú) a jej štruktúra bude nasledovná:

CREATE TABLE users (
    id integer auto_increment,
    username char(50),
    password char(50),
    PRIMARY KEY (id)
);

Ďalším krokom je načítanie tejto komponenty. Komponentu musíme načítať v niektorom z našich existujúcich controllerov, my ju budeme volať z AppController v súbore app/app_contro­ller.php, aby bola komponenta dostupná pre všetky zdedené controllery:

class AppController extends Controller {
    var $components = array('Auth');
}

Komponentu máme načítanú, následne môžeme začať s prihlasovaním užívateľov.

Prihlasujeme užívateľa

Najprv si musíme nastaviť potrebné premenné v komponente a tým zabezpečiť jej inicializáciu. Postupne určíme, na akú adresu nás aplikácia presmeruje po úspešnom prihlásení resp. po úspešnom odhlásení, taktiež je potrebné určiť, ktorá časť systému bude prístupná len prihlásenému užívateľovi. Tieto nastavenia nastavíme v AppController v súbore app/app_contro­ller.php

function beforeFilter() {
    $this->Auth->loginRedirect = array('controller' => 'articles', 'action' => 'index');
    $this->Auth->logoutRedirect = '/';
    $this->Auth->authorize = 'controller';
    $this->Auth->allow(array('index','view'));
}

function isAuthorized() {
    return true;
}

Direktívou $this->Auth->authorize = ‚controller‘ sme určili, že komponenta bude overovať prístup ku controlleru a jeho akciám. Tento spôsob je najjednoduchší, preto ho použijeme, avšak medzi možnosti patrí aj overovanie prístupu k modelu.

Direktívou $this->Auth->allow(array(‚in­dex‘,‚view‘)); sme určili, že akcie view a index nebudú vyžadovať prihlásenie užívateľa, všetky ostatné akcie následne prihlásenie budú vyžadovať.

Ešte treba spomenúť metódu isAuthorized(), ktorá musí byť implementovaná, ak používame spôsob overovania controller. Do tejto metódy môžeme dať nejaké rozšírujúce podmienky súvisiace s overovaním užívateľa, napr. po úspešnom overení mena a hesla užívateľa môžeme skontrolovať, či je užívateľ administrátor a pod. V našom prípade žiadne doplňujúce podmienky nemáme, takže metóda vracia priamo hodnotu true a jedinou podmienkou pre prihlásenie je úspešné overenie mena a hesla.

Aby sa mohol užívateľ úspešne prihlásiť, musíme ešte vytvoriť formulár na prihlasovanie a príslušné akcie v controlleri UsersController v súbore app/controller­s/users_contro­ller.php.

V súbore app/view/admin_lo­gin.ctp vytvoríme formulár pre prihlásenie užívateľa:

<?php
if  ($session->check('Message.auth')) $session->flash('auth');
echo $form->create('User', array('action' => 'login'));
echo $form->input('username');
echo $form->input('password');
echo $form->end('Login');
?>

V súbore app/controller­s/users_contro­llers.php doplníme potrebné akcie

function admin_login() {
}

function logout() {
    $this->redirect($this->Auth->logout());
}

Teraz máme všetko pripravené pre úspešné prihlasovanie a odhlasovanie užívateľov. Ak si teraz skúsime zadať adresu example.com/ad­min/articles/add, systém nás automaticky presmeruje na prihlasovací formulár na adrese example.com/ad­min/users/login a nedovolí nám bez prihlásenia a úspešného overenia mena a hesla vstúpiť na túto adresu. Po zadaní adresy example.com/u­sers/logout budeme odhlásení a presmerovaní na adresu example.com/ar­ticles presne tak, ako sme si to určili v AppController v metóde beforeFilter() direktívou $this->Auth->logoutRedirect = array(‚controller‘ ⇒ ‚articles‘,‚action‘ ⇒ ‚index‘)

Záver

V článku sme si predstavili dva možné spôsoby, ako vytvoriť admin rozhranie pre našu aplikáciu. Myslím si, že spôsob s predpripraveným riešením CakePHP je oveľa praktickejší a poskytuje nám väčšiu flexibilitu. Taktiež sme si ukázali jednoduchý prihlasovací mechanizmus pomocou komponenty Auth.

Týmto je základná funkčnosť našej aplikácie kompletná a v budúcich častiach si ukážeme pokročilejšiu prácu v CakePHP, ako napríklad prácu s helpermi, AJAXom atď.

Na záver ešte poznamenám, že v prílohe sa nachádza kompletná ukážková aplikácia. Inštalačný skript pre databázu sa nachádza v súbore app/config/sql/in­stall.sql a prístup k databáze je potrebné nastaviť v súbore app/config/da­tabase.php

Rád uvítam vaše námety a pripomienky v diskusii k článku.

Download: cakephp-6.tar.bz2.

       

Hodnocení: 100 %

        špatnédobré        

Nástroje: Tisk bez diskuse

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

Josef Kufner avatar 29.1.2009 01:04 Josef Kufner | skóre: 69
Rozbalit Rozbalit vše Re: CakePHP: tvoríme CMS - 6 (admin rozhranie)
Není to trošku nešikovné psát všecko dvakrát?
Hello world ! Segmentation fault (core dumped)
29.1.2009 02:18 Majkl
Rozbalit Rozbalit vše Re: CakePHP: tvoríme CMS - 6 (admin rozhranie)

Administracni rozhrani je idealni si nechat vygenerovat pomoci: cake bake, pripadne jsou i dalsi konsolove skripty, fajn je bake_admin - vygeneruje vsechny views pro administraci.

29.1.2009 11:18 Tibor Piňo | skóre: 26 | blog: Iron_Maiden
Rozbalit Rozbalit vše Re: CakePHP: tvoríme CMS - 6 (admin rozhranie)

 Samozrejme s tym suhlasim, ale konzola v cakephp je urcite samostatna tema na clanok

29.1.2009 13:51 Peter Listiak
Rozbalit Rozbalit vše Re: CakePHP: tvoríme CMS - 6 (admin rozhranie)

A kedy by mohol byt? Niekedy sa clanky na tvojom blogu objavovali castejsie ale teraz asi velmi nestihas :(

2.2.2009 11:49 poLK
Rozbalit Rozbalit vše Re: CakePHP: tvoríme CMS - 6 (admin rozhranie)

Opravte si prosím link na dokumentaci k AuthComponent na http://api.cakephp.org/class/auth-component - api.cakephp.org již nehostuje výstup z doxygen (http://groups.google.com/group/cake-php/browse_thread/thread/34b0ec24dd843d29/0b0c1821823c4367).

2.2.2009 11:58 poLK
Rozbalit Rozbalit vše Re: CakePHP: tvoríme CMS - 6 (admin rozhranie)

Někam se Vám vytratilo nastavení AuthComponent::$loginAction, bez kterého automatické přihlašování (a přesměrování na UsersController::admin_login()) fungovat nebude.

3.2.2009 14:21 poLK
Rozbalit Rozbalit vše Re: CakePHP: tvoríme CMS - 6 (admin rozhranie)

...a v textu popisujete přesměrování po odhlášení s jiným nastavením AuthComponent::$logoutRedirect, než je v ukázkovém kódu AppController.

18.5.2013 16:08 jirka
Rozbalit Rozbalit vše Re: CakePHP: tvoríme CMS - 6 (admin rozhranie)
Našel jsem fajn web o CakePHP: http://cakemag.cz

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.