application request z RouterFactory

- vosy
- Člen | 532
ahoj v mam tuto routu
$frontRouter[] = new Route('[<locale cs|en|de>/]<presenter>/<action>/<id>',
array(
'presenter'=>array(
Route::FILTER_IN => function($params) use($httpRequest)
{
$appRequest = $this->match($httpRequest);
$r = $this->UrlTransform->uriToPresenter($params, $appRequest);
return $r;
}
),
'action'=>'default',
'locale'=>'cs',
'id'=>NULL
));
potreboval bych se nejak dostat k \Nette\Application\Request
dix

- David Matějka
- Moderator | 6445
ceho chces dosahnout ze tam volas uvnitr match? to jako volas na
nejakym routeru nebo co?
http request si samozrejme muzes injectnout
ale nebude pro tebe vhodnejsi nejak pouzit univerzalni filter
NULL?
new Route(..., array(
NULL => Route::FILTER_IN =>function($params) {
//v $params jsou vsechny matchnuty parametry
return $params;
}));

- vosy
- Člen | 532
kdyz pouziju
NULL => Route::FILTER_IN =>function($params) {
tak dostanu:
Array
(
[locale] => en
[presenter] => MapaStrankyen
[action] => default
[id] =>
)
potreboval bych se dostat k URI „mapa-strankyen“
ale v parametrech to mam prevedene na nazev presenteru
a kdyz pouziju
'presenter' => Route::FILTER_IN =>function($params) {
tak dostanu „mapa-strankyen“
ale nedostanuse k parametru LOCALE :(

- David Matějka
- Moderator | 6445
a chces vubec aby ten parametr byl „presenter“? ten se totiz prevadi
prave z toho jednoho tvaru s pomlckama na ten druhy.
Mozna bude vhodnejsi, kdyz ten parametr pojmenujes treba „slug“ a v tom
filtru si dle potreby unsetnes neco, neco pridas atd.

- vosy
- Člen | 532
mel jsem:
$frontRouter[] = $route = new FilterRoute('[<locale cs|en|de>/]<presenterUri>/<action>/<id>',
array(
'presenter'=>'Homepage',
'action'=>'default',
'locale'=>'cs',
'id'=>NULL
));
$route->addFilter('presenterUri', array($this->UrlTransform, 'uriToPresenter'), array($this->UrlTransform, 'presenterToUri'));
a
function uriToPresenter($slug, \Nette\Application\Request $request)
{
$locale = $request->parameters['locale'];
$tab = \App\Glb::$TABS['uris'];
$r = $this->db->table($tab)
->WHERE('uri_'.$locale, $slug)
->fetch();
$p = $r->presenter;
if($p!='')
{
return $p;
}else
{
return 'Error';
}
}
vracena hodnota ze mi nevraci jako nazev presenteru tam je furt Homepage

- David Matějka
- Moderator | 6445
- nevim o jakou implementaci FilterRoute se jedna, ale pravdepodobne kdyz vracis jen string na filtru pro presenterUri, tak to presenter fakt neupravi
- pouzij ten univerzalni NULL filtr, zhruba takhle:
$frontRouter[] = $route = new Route('[<locale cs|en|de>/]<slug>/<action>/<id>',
array(
'presenter'=>'Homepage',
'action'=>'default',
'locale'=>'cs',
'id'=>NULL,
NULL => array(
Route::FILTER_IN = function($params) {
$params['presenter'] = ziskej_presenter_dle_slugu_a_locale($params['slug'], $params['locale']);
//mozna budes muset unsetnout ten slug
return $params;
},
//a mozna budes muset vytvorit nejakou FILTER_OUT
)
));
3. hledej a trochu se snaz, tohle se tu resilo asi stokrat
Editoval matej21 (2. 6. 2014 23:45)

- vosy
- Člen | 532
FILTER OUT jsem udelal takto
$frontRouter[] = $route = new Route('[<locale cs|en|de>/]<presenterUri>/<action>/<id>',
array(
'presenter'=>'Homepage',
'action'=>'default',
'locale'=>'cs',
'id'=>NULL,
NULL => array(
Route::FILTER_IN => function($params) {
// print_r($params);
$params['presenter'] = $this->UrlTransform->uriToPresenter($params['presenterUri'], $params['locale']);
//mozna budes muset unsetnout ten slug
return $params;
},
Route::FILTER_OUT => function($params) {
$params['presenterUri'] = $this->UrlTransform->presenterToUri($params['presenter'], $params['locale']);
return $params;
}
)
));
ale to mi vyhodi URL: „http://www.bt.loc/de/mapa-stranky/?presenterUri=mapa-strankyde“

- David Matějka
- Moderator | 6445
zkus ve filter_out unsetnout (nebo nastavit na defaultni
Homepage) ten presenter..

- vosy
- Člen | 532
Dix, jen nemohu najit co je mysleno tim unsetnutim
udelal jsem
Route::FILTER_OUT => function($params) {
unset($params['presenterUri']);
unset($params['presenter']);
$params['presenterUri'] = $this->UrlTransform->presenterToUri($params['presenter'], $params['locale']);
return $params;
}
ale bez uspechu
Editoval vosy (3. 6. 2014 8:40)