Dánské ministerstvo pro digitální záležitosti má v plánu přejít na Linux a LibreOffice [It's FOSS News].
V úterý Google vydal Android 16. Zdrojové kódy jsou k dispozici na AOSP (Android Open Source Project). Chybí (zatím?) ale zdrojové kódy specifické pro telefony Pixel od Googlu. Projekty jako CalyxOS a GrapheneOS řeší, jak tyto telefony nadále podporovat. Nejistá je podpora budoucích Pixelů. Souvisí to s hrozícím rozdělením Googlu (Google, Chrome, Android)?
Byla vydána (𝕏) květnová aktualizace aneb nová verze 1.101 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.101 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
V Brně na FIT VUT probíhá třídenní open source komunitní konference DevConf.CZ 2025. Vstup je zdarma, nutná je ale registrace. Na programu je celá řada zajímavých přednášek, lightning talků, meetupů a workshopů. Přednášky lze sledovat i online na YouTube kanálu konference. Aktuální dění lze sledovat na Matrixu, 𝕏 nebo Mastodonu.
Vyloučení technologií, které by mohly představovat bezpečnostní riziko pro stát, má umožnit zákon o kybernetické bezpečnosti, který včera Senát schválil spolu s novelami navazujících právních předpisů. Norma, kterou nyní dostane k podpisu prezident, počítá rovněž s prověřováním dodavatelů technologií pro stát. Normy mají nabýt účinnosti od třetího měsíce po jejich vyhlášení ve Sbírce zákonů.
Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.6.
Po Red Hat Enterprise Linuxu a AlmaLinuxu byl v nové stabilní verzi 10.0 vydán také Rocky Linux. Přehled novinek v poznámkách k vydání.
Bylo vydáno Eclipse IDE 2025-06 aneb Eclipse 4.36. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
Americká filmová studia Walt Disney a Universal Pictures podala žalobu na provozovatele populárního generátoru obrázků pomocí umělé inteligence (AI) Midjourney. Zdůvodňují to údajným porušováním autorských práv. V žalobě podané u federálního soudu v Los Angeles označují firmu za „bezednou jámu plagiátorství“, neboť podle nich bez povolení bezostyšně kopíruje a šíří postavy z filmů jako Star Wars, Ledové království nebo Já, padouch, aniž by do nich investovala jediný cent.
Ultra Ethernet Consortium (UEC), jehož cílem je optimalizace a další vývoj Ethernetu s důrazem na rostoucí síťové požadavky AI a HPC, vydalo specifikaci Ultra Ethernet 1.0 (pdf, YouTube).
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: