Evropská komise schválila český plán na poskytnutí státní pomoci v objemu 450 milionů eur (téměř 11 miliard Kč) na rozšíření výroby amerického producenta polovodičů onsemi v Rožnově pod Radhoštěm. Komise o tom informovala v dnešní tiskové zprávě. Společnost onsemi by podle ní do nového závodu v Rožnově pod Radhoštěm měla investovat 1,64 miliardy eur (téměř 40 miliard Kč).
Microsoft v příspěvku na svém blogu věnovaném open source oznámil, že textové adventury Zork I, Zork II a Zork III (Wikipedie) jsou oficiálně open source pod licencí MIT.
První prosincový týden proběhne SUSE Hack Week 25. Zaměstnanci SUSE mohou věnovat svůj pracovní čas libovolným open source projektům, například přidání AI agenta do Bugzilly, implementaci SSH v programovacím jazyce Zig nebo portaci klasických her na Linux. Připojit se může kdokoli.
Google oznámil, že Quick Share na Androidu funguje s AirDropem na iOS. Zatím na telefonech Pixel 10. Uživatelé tak mohou snadno přenášet soubory z telefonů s Androidem na iPhony a obráceně.
Byla vydána nová verze 8.5 (8.5.0) skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Přináší řadu novinek a vylepšení (URI Extension, Pipe Operator, Clone With, …). Vydána byla také příručka pro přechod z předchozích verzí.
Evropská komise zahájila tři vyšetřování týkající se cloudových platforem Amazon Web Services (AWS) a Microsoft Azure. Evropská exekutiva, která plní také funkci unijního antimonopolního orgánu, chce mimo jiné určit, zda jsou americké společnosti Microsoft a Amazon v cloudových službách takzvanými gatekeepery, tedy hráči, kteří významně ovlivňují provoz internetu a musí dle nařízení o digitálních trzích (DMA) na společném trhu
… více »Společnost Meta Platforms vyhrála ostře sledovaný spor o akvizici sítě pro sdílení fotografií Instagram a komunikační aplikace WhatsApp. Podle amerického soudu firma jejich převzetím neporušila antimonopolní zákon, protože si tak nemonopolizovala trh sociálních sítí. Žalobu na Metu podala před pěti lety americká Federální obchodní komise (FTC). FTC argumentovala, že Meta, tehdy známá jako Facebook, koupila tyto dvě společnosti v letech 2012 a 2014 proto, aby s nimi nemusela soutěžit.
Home Assistant včera představil svůj nejnovější oficiální hardware: Home Assistant Connect ZBT-2 pro připojení zařízení na sítích Zigbee nebo Thread.
Byla vydána verze 9.1 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a informačním videu.
Byl aktualizován seznam 500 nejvýkonnějších superpočítačů na světě TOP500. Nejvýkonnějším superpočítačem zůstává El Capitan od HPE (Cray) s výkonem 1,809 exaFLOPS. Druhý Frontier má výkon 1,353 exaFLOPS. Třetí Aurora má výkon 1,012 exaFLOPS. Nejvýkonnější superpočítač v Evropě JUPITER Booster s výkonem 1,000 exaFLOPS je na čtvrtém místě. Nejvýkonnější český superpočítač C24 klesl na 192. místo. Karolina, GPU partition klesla na 224. místo a Karolina, CPU partition na 450. místo. Další přehledy a statistiky na stránkách projektu.
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.
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/admin/* //
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.
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/core.php
odkomentovaním riadku následovne
Configure::write('Routing.admin', 'admin');
Týmto sme dali CakePHP najavo, že za adresou http:example.com/admin// 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 ArticlesController v súbore
app/controllers/articles_controller.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/articles/view/10, ku akcii admin_add pristupujeme cez URL example.com/admin/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.
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.
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_controller.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.
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_controller.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(‚index‘,‚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/controllers/users_controller.php.
V súbore app/view/admin_login.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/controllers/users_controllers.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/admin/articles/add, systém nás automaticky presmeruje na prihlasovací formulár na adrese example.com/admin/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/users/logout budeme odhlásení a presmerovaní na adresu example.com/articles presne tak, ako sme si to určili v AppController v metóde beforeFilter() direktívou $this->Auth->logoutRedirect = array(‚controller‘ ⇒ ‚articles‘,‚action‘ ⇒ ‚index‘)
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/install.sql a prístup k databáze je
potrebné nastaviť v súbore app/config/database.php
Rád uvítam vaše námety a pripomienky v diskusii k článku.
Download: cakephp-6.tar.bz2.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
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.
Samozrejme s tym suhlasim, ale konzola v cakephp je urcite samostatna tema na clanok
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).
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.
...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.