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)