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

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

z match metody ma vypadnout bud NULL nebo appRequest, ne jen category id