vyhledávání a co zkouší vkládat uživatelé

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MzK
Člen | 127
+
0
-

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
+
0
-

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
+
0
-

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.