Vlastní Route match – getPresenterName() error
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- iwory
- Člen | 147
Zdravímm snažím se podle Videa Jana
Smitky napsat routování kategorií (zjišťování zda kategorie existuje
apod.)
Bohužel narážím na chybu: Call to a member function getPresenterName() on a
non-object
Vydedukoval jsem, že mu bude asi chybět container, jelikož nevidí na
presenter. Bohužel netuším Jak mu ho nabídnout jelikož routy nevytvářím
v bootstrapu kde je $container kde je container přístupný.
Neon:
- App\EshopRouterFactory
router: @App\EshopRouterFactory::createRouter
Route:
<?php
class EshopRouterFactory
{
/** @return \Nette\Application\IRouter */
public function createRouter()
{
$eshopCategoryModel = $this->eshopCategoryModel;
$categoryRoute = new EshopCategoryRouterFactory('<id>', array(
'presenter' => 'Page',
'action' => 'Category',
'id' => array(
Route::FILTER_OUT => function($id) use ($eshopCategoryModel)
{
if(!Validators::isNumericInt($id))
return $id;
else
{
$isCategory = $this->eshopCategoryModel->table_categories()->where('seo_url', $id)->fetch();
if($isCategory)
return $isCategory['id'];
}
return NULL;
}
)
));
$categoryRoute->eshopCategoryModel = $this->eshopCategoryModel;
$router[] = $categoryRoute;
$router[] = new Route('<presenter>/<action>[/<id>]', array('presenter' => 'Page', 'action' => 'default'));
return $router;
}
}
EshopCategoryRouterFactory
class EshopCategoryRouterFactory extends Route
{
/** @var EshopCategoryModel */
public $eshopCategoryModel;
public function match(IRequest $request)
{
/** @var $appRequest Request */
$appRequest = parent::match($request);
if(!isset($appRequest->parameters['id']))
return NULL;
if(!Validators::isNumericInt($appRequest->parameters['id']))
{
$category = $this->eshopCategoryModel->table_categories()->where('seo_url', $appRequest->parameters['id'])->fetch();
if($category)
return $category['id'];
}
return NULL;
}
}
Díky moc za nakopnutí
- David Matějka
- Moderator | 6445
z match metody ma vypadnout bud NULL
nebo appRequest, ne jen
category id