vyhledávání a co zkouší vkládat uživatelé
- MzK
- Člen | 127
Občas mi přijde report od laděnky takto:
InvalidLinkException
No route for Fulltext:default(searchString=neco.rajce.idnes.cz/neco)
Problém je v tom lomítku /.
Routu mám takto:
<?php
$router[] = new Route('vyhledavani/<searchString>', array(
'presenter' => 'Fulltext',
'action' => 'default',
'searchString' => null
));
?>
Jak zabránit tomu invalidLink Exception? Na ten Search presenter (kde bych to ošetřil) se už nedostane, výjimka je rychlejší… Dík
Editoval zacatecnik (29. 8. 2010 15:53)
- MzK
- Člen | 127
Tak jsem zkusil ošetřit to, co vkládá uživatel (na straně formuláře)
<?php
$data = $form->getValues();
$hledej = $data['hledej'];
$hledej = mb_strtolower($hledej); // zmensim
$hledej = preg_replace("/[^a-zA-Z0-9(+ěščřžýáíéůúó)\s]/", '+', $hledej); // ponecham jen hledatelne znaky
$hledej = preg_replace('~\s~','+',$hledej); // ostranim bile znaky
$hledej = preg_replace("/(.)\\1{3,}/", "\\1\\1\\1", $hledej); // odstrani 3 schodne znaky po sobe (2 je malo)
$hledej = str_replace('++', '+',$hledej);
$hledej = str_replace('++', '+', $hledej);
$this->redirect('fulltext:', $hledej); // presmeruje spravne, at zada co zada
?>
Takže zabráním invalit Link exception. Ale pokud nějaký uživatel zadá
hledaný výraz přímo do URL např takto:
/fulltext/test/test
(přidá lomítky, stejně se vyhodí výjimka
BadRequestException, ale já bych chtěl, aby skript pokračoval až na
presenter „fulltext“ kde se zadaná url ošetří, místo vyhození chyby
404. Jak bych měl upravit $router[]?
- David Grudl
- Nette Core | 8218
Uprav to na new Route('vyhledavani/<searchString .+>'
Je možné, že to bude přidávat lomítko na konec searchString (known bug), takže je bude v presenteru potřeba odstranit.