Google na své vývojářské konferenci Google I/O 2024 představil řadu novinek. Keynote byl věnován umělé inteligenci (DeepMind, Gemini, Responsible AI).
V Gitu bylo nalezeno 5 zranitelností. Opraveny jsou ve verzích 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 a 2.39.4. Útočník může připravit repozitář tak, že při jeho klonování (git clone) může dojít ke spuštění libovolného kódu.
Virtualizační softwary VMware Workstation Pro a VMware Fusion Pro jsou nově pro osobní použití zdarma. Softwary VMware Workstation Player a VMware Fusion Player končí.
Linuxová distribuce Endless OS (Wikipedie) byla vydána ve verzi 6.0.0. Přehled novinek i s náhledy v příspěvku na blogu, poznámkách k vydání a také na YouTube.
Byl vydán Mozilla Firefox 126.0. Přehled novinek v poznámkách k vydání, poznámkách k vydání pro firmy a na stránce věnované vývojářům. Vylepšena byla funkce "Zkopírovat odkaz bez sledovacích prvků". Přidána byla podpora zstd (Zstandard). Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 126 je již k dispozici také na Flathubu a Snapcraftu.
Grafana (Wikipedie), tj. open source nástroj pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění, byla vydána ve verzi 11.0. Přehled novinek v aktualizované dokumentaci.
Byla vydána nová verze 24.0 linuxové distribuce Manjaro (Wikipedie). Její kódové jméno je Wynsdey. Ke stažení je v edicích GNOME, KDE PLASMA a XFCE.
Byla představena oficiální rozšiřující deska Raspberry Pi M.2 HAT+ pro připojování M.2 periferii jako jsou NVMe disky a AI akcelerátory k Raspberry Pi 5. Cena je 12 dolarů.
V Praze o víkendu proběhla bastlířská událost roku - výstava Maker Fair v Praze. I strahovští bastlíři nelenili a bastly ostatních prozkoumali. Přijďte si proto i vy na Virtuální Bastlírnu popovídat, co Vás nejvíce zaujalo a jaké projekty jste si přinesli! Samozřejmě, nejen českou bastlířskou scénou je člověk živ - takže co se stalo ve světě a o čem mohou strahováci něco říct? Smutnou zprávou může být to, že provozovatel Sigfoxu jde do
… více »Kam asi vede IllllIllIIl.llIlI.lI? Zkracovač URL llIlI.lI.
Podstatná část dat, která uživatel předává serveru je předávána přes formulář, který uživatel vyplní a odešle na server. Tam je ověřeno, zda jsou data validní a případně zpracovány. Zend obsahuje třídu Zend_Form
, která krom toho, že umožňuje vytvořit formulář a získat z něj data navíc umožňuje další věci, jako navěšení validátorů pro validaci obsahu, přidání filtrů a nebo obalení jednotlivých elementů formuláře HTML tagy. Toto vše ani nemusíme provádět v php kódu, celý formulář totiž můžeme definovat v konfiguračním souboru. Osobně ale nejvíce oceňuji právě možnost přidání validátorů, případně filtrů, na jednotlivé elementy, přičemž většina běžně používaných validátorů i filtrů je již v Zendu implementovaná.
Po vytvoření formuláře obvykle jako první nastavíme akci, která se provede při odeslání formuláře a metodu, jakou se budou předávat data:
$form = new Zend_Form(); $form->setAction('/zendTest/login/auth') ->setMethod('post');Pomocí metody
setAttrib('attribName','attribValue')
můžeme formuláři nastavit jakýkoli další atribut. Elementy formuláře vytvoříme zavoláním metody createElement('elementType', 'elementName')
. Na elementy formuláře pak můžeme navěsit validátory (a filtry):
$login = $form->createElement('text', 'username'); $login->addValidator('alnum') ->addValidator('stringLength', false, array(5)) ->setRequired(true) $passwd = $form->createElement('password', 'passwd'); $passwd->addValidator('StringLength', false, array(5)) ->setRequired(true)V tomto příkladě jsme vytvořili dva elementy formuláře, pole pro zadání uživatelského jména a pole pro zadání hesla. Obě políčka musí být vyplněná (
setRequired(true)
) a obsahovat minimálně pět znaků (addValidator('StringLength', false, array(5))
). První parametr metody addValidator
je jméno validátoru, druhý říká, zda má pokracovat vyhodnocování dalších validátorů, pokud podmínka aktuálního validátoru není splněná a poslední předává další parametry potřebné pro vyhodnocení. První validátor (alphanum) vyžaduje, jak již název napovídá, aby login uživatele obsahoval jen alfanumerické znaky.
Filtry by se přidávaly obdobně:
$login->addFilter('StringtoLower');Seznam všech již naprogramovaných filtrů a validátorů naleznete v manuálu a pokud vám nebudou vyhovovat, můžete si napsat vlastní.
Na závěr oba prvky přidáme do formuláře (zatím jsme je jen vytvořili, ale nikoli přidali do formuláře) a přidáme ještě poslední element - tlačítko pro odeslání:
$form->addElement($login) ->addElement($passwd) ->addElement('submit', 'login', array('label' => 'Login'));Formulář pak předáme do view:
$this->view->form = $form; $this->render('showform');a ve view (showform.phtml) zobrazíme:
<?= $this->form ?>
Zda jsou data odeslaná přes formulář validní zjistíme zavoláním metody isValid()
:
$form->isValid($_POST)Pokud ano, data z formuláře můžeme získat několika způsoby, např:
$values = $form->getValues();(a nebo třeba přímo z requestu:
this->_request->getPost('username')
)
Na závěr se ještě letmo zmíním o dekoratérech - prvcích, které elementy formuláře obalují HTML tagy. Opět platí, že si můžeme definovat vlastní. Pokud neučíme jinak, jsou k formuláři připojeny tyto čtyři dekoratéry:
ViewHelper
- nastavuje view helper, který se použije k renderování elementu
Errors
- přidává chybová hlášení (typicky když selže validace)
HtmlTag
- obaluje element (a chyby s ním spojené) daným HTML tagem (defaultně nastaveno na <dd>)
Label
- přidává tag <dt>
removeDecorator('name')
na daném elementu:
$login->removeDecorator('Errors');
Celý kontroler pro přihlášení uživatele (zatím bez autentizace uživatele, jen odelání formuláře) by mohl vypadat takto (příklad je až na drobné úpravy celý převzatý z manuálu Zendu):
<?php class LoginController extends Zend_Controller_Action { public function getLoginForm(){ $form = new Zend_Form(); $form->setAction('/zendTest/login/auth') ->setMethod('post'); $login = $form->createElement('text', 'username'); $login->addValidator('alnum') ->addValidator('stringLength', false, array(5)) ->setRequired(true) ->removeDecorator('Errors'); $passwd = $form->createElement('password', 'passwd'); $passwd->addValidator('StringLength', false, array(5)) ->setRequired(true) ->removeDecorator('Errors'); $form->addElement($login) ->addElement($passwd) ->addElement('submit', 'login', array('label' => 'Login')); return $form; } public function indexAction(){ $this->view->form = $this->getLoginForm(); $this->render('showform'); } public function authAction(){ if (!$this->getRequest()->isPost()) { return $this->_forward('index'); } $form = $this->getLoginForm(); if (!$form->isValid($_POST)) { $this->view->form = $form; return $this->render('showform'); } // authentization // ... } }
Tiskni Sdílej:
muzu se optat jakej je rozdil, ve volani metody? diky
$this -> getLoginForm();
a
self::getLoginForm();