Dnes a zítra probíhá vývojářská konference Google I/O 2025. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).
V Bostonu probíhá konference Red Hat Summit 2025. Vybrané přednášky lze sledovat na YouTube. Dění lze sledovat na síti 𝕏 (#RHSummit).
Společnost Red Hat oficiálně oznámila vydání Red Hat Enterprise Linuxu 10. Vedle nových vlastností přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.
Tuto sobotu 24. května se koná historicky první komunitní den projektu Home Assistant. Zváni jsou všichni příznivci, nadšenci a uživatelé tohoto projektu. Pro účast je potřebná registrace. Odkazy na akce v Praze a v Bratislavě.
Troy Hunt představil Have I Been Pwned 2.0, tj. nový vylepšený web služby, kde si uživatelé mohou zkontrolovat, zda se jejich hesla a osobní údaje neobjevili v únicích dat a případně se nechat na další úniky upozorňovat.
Microsoft představil open source textový editor Edit bežící v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
V Seattlu a také online probíhá konference Microsoft Build 2025. Microsoft představuje své novinky. Windows Subsystem for Linux je nově open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Z příspěvku Turris Sentinel – co přinesl rok 2024 na blogu CZ.NIC: "Za poslední rok (únor 2024 – únor 2025) jsme zachytili 8,3 miliardy incidentů a to z 232 zemí a z jejich závislých území. Tyto útoky přišly od 6,2 milionu útočníků (respektive unikátních adres). SMTP minipot je stále nejlákavější pastí, zhruba 79 % útoků bylo směřováno na tento minipot, 16 % útoků směřovalo na minipot Telnet, 3 % útoků směřovaly na minipot HTTP a 2 % na minipot FTP. Dále jsme zaznamenali 3,2 milionu unikátních hesel a 318 tisíc unikátních loginů, které útočníci zkoušeli."
Byla vydána (Mastodon, 𝕏) nová verze 3.0.4 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.
Byla vydána nová stabilní verze 7.4 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 136. Přehled novinek i s náhledy v příspěvku na blogu.
Minule jsem mimo jiné napsal něco v tom smyslu, že příchozí požadavky jsou obsluhovány front controllerem, který se zjednodušeně řečeno stará o zavolání příslušného kontroleru. Než se budu zabývat něčím dalším, bylo by asi dobré si aspoň trochu vyjasnit, co přesně se při zpracování požadavku děje.
Celý proces je dobře znázorněn na následujícím obrázku (převzatý z manuálu Zendu):
Je zde v podstatě znázorněno, jak je v Zendu implementován (třída Zend_Controller_Front
) návrhový vzor Front Controller. Příchozí požadavek je obvykle reprezentován třídou Zend_Controller_Request_Http
(obecně třídou Zend_Controller_Request_Abstract
, třída Http
je její potomek), která kromě parametrů obsahuje informace o jménu kontrolertu a akce, která má tento požadavek zpracovávat (a některé další informace). Zend_Controller_Front
je singleton, což znamená, že vždy existuje jen jedna jeho instance. Tato třída také, mimo jiné, registruje pluginy, které umožňují jednoduše rozšiřovat její možnosti bez nutnosti vytváření jejích potomků. Pro obsloužení požadavku se na instanci této třídy obvykle volá metoda dispatch()
, která se skládá ze tří částí:
Jako první je tedy zavolán router, jehož úkolem je zjistit, jaký kontroler a akce mají požadavek obsloužit. Minule jsem psal, že toto určení probíhá na základě URI podle klíče aplikace/modul/kontroler/akce
. Tento proces ale může být složitější, můžeme např. sami definovat pravidla (pomocí Zend_Controller_Router_Rewrite
), na jaký konroler se má daná URI mapovat a pod. (o tomto podrobněji někdy jindy). Proces routování může pro každý požadavek proběhnout jen jednou.
Následuje dispatching, což je proces, při němž je z požadavku zjištěn název kontroleru a akce, vytvoří se instance kontroleru (který musí být potomkem třídy Zend_Controller_Action
) a na ní se zavolá příslušná metoda. Tento proces, na rozdíl od routingu, může pro daný požadavek proběhnutou vícekrát. Probíhá ve smyčce tak dlouho, dokud není na požadavku nastaven atribut isDispatched
na hodnotu true
(po vstupu do smyčky je tento atribut automaticky nastaven na true
, takže pokud nechceme požadavek předávat dalšímu kontroleru, nemusíme se o nic starat). Naopak další cyklus smyčky nastane např. když v nějaké akci kontroleru zavoláme metodu _forward()
. Jak je vidět z obrázku, dispatchingu samotnému předchází ještě predispatching a před vyhodnocením, zda bude smyčka pokračovat dalším cyklem se volá postdispatching. Tyto metody se ale nevolají na front controlleru, ale action controlleru (potomek Zend_Controller_Action
) nebo na pluginech. Stručně řečeno, pluginy kontroleru jsou potomky třídy Zend_Controller_Plugin_Abstract
. Jak bylo řečeno v úvodu, můžeme je zaregistrovat u front controlleru a tak rozšiřovat jeho možnosti (implementováním metod preDispatch()
a postDispatch()
a dalších).
Vše si ukážeme na krátkém příkládku. Vytvoříme kontroler, který bude obsluhovat přístup k nějaké části aplikace, která bude přístupná jen pro přihlášené uživatele. V kontroleru implementujeme metodu preDispatch()
, která před tím než bude na kontroleru vykonána nějaká akce zkontroluje, zda je uživatel přihlášený (o tom, jaké Zend poskytuje možnosti pro autorizaci a autentizaci taky snad někdy jindy. Pokud uživatel nebude přihlášený, přesměrujeme jej na přihlašovací stránku:
<?php class RestrictedController extends Zend_Controller_Action { public function preDispatch($request){ $auth = Zend_Auth::getInstance(); if(!$auth->hasIdentity()){ $this->_redirect('auth/login'); } } /* public function indexAction(){ //something } */ }Měli bychom ještě implementovat alespoň index akci, ale jelikož zatím uživatel nemá žádný způsob jak se přihlásit, tak je to v tuto chvíli zbytečné, přes predispatching se stejně nedostaneme. Potřebujeme ale vytvořil AuthController. Nejběžnější způsob autentizace je vyplnění formuláře s loginem a heslem. O formulářích ale taky někdy jindy, takže zatím akci login taky dělat nebudeme. Pokud framework na kontroleru nenajde požadovanou akci, pak na kontroleru zavolá metodu
__call()
. Implementujeme tedy aspoň tuto metodu, která zobrazí nějakou stránku, že požadovaná stránka ještě není hotová (místo toho bychom mohli použít třeba Zend_Controller_Plugin_ErrorHandler
, ale to bychom musel ještě vyrobit ErrorController
a zbytečně by se nám příklad komplikoval<?php class AuthController extends Zend_Controller_Action { public function __call($method, $args) { $this->view->errorMsg = 'Sorry, login page not done yet!'; return $this->render('error'); } /* public function loginAction(){ //handle login } */ }
Na závěr ještě doplním, že když byla řeč o kontolerech v Zendu, tak bych určitě měl zmínit, že existuje něco jako action helper, ale o tom taky až někdy jindy (snad
Tiskni
Sdílej: