Page not found. Missing template app/Front/templates/Gallery/1-clanek.latte

vanaveno
Člen | 144
+
0
-

Ahojte mám problém s routuváním, mělo by mi to dělat herké url, ale místo toho mi to hledá šablonu.

<?php
/**
     * @return Nette\Application\IRouter
     */
    public function createRouter(): RouteList
    {
        $router = new RouteList();

        $router[] = $postRoute = new RouteList();
        $postRoute[] = new PostRoute('gallery/<postId>', array(
                                            'module' => 'Front',
                                            'presenter' => 'Gallery',
                                            'action' => 'detail',

                                            'postId' => array(
                                              Route::FILTER_IN => function ($postId) {
                                                  if (is_numeric($postId)) {
                                                      return $postId;
                                                  } else {
                                                      return $this->postManager->getPost()->where('slug = ?', $postId)->fetch()->postId;
                                                  }
                                              },

                    Route::FILTER_OUT => function ($postId) {
                        if (!is_numeric($postId)) {
                            return $postId;
                        } else {
                            bdump($postId);
                            return $this->postManager->getPost()->get($postId)->slug;
                        }
                    }),

                   ));


        $router[] = new Route('<presenter>/<action>', array(
                    'module' => 'Front',
                    'presenter' => 'Homepage',
                    'action' => 'default',
                ));


        $router[] = new Route('admin/<presenter>/<action>', array(
            'module' => 'Admin',
            'presenter' => 'Homepage',
            'action' => 'default',
        ));


        return $router;
    }
?>

Tady PostRoute.php

<?php

namespace App;

use Nette;
use App\Model\PostManager;

class PostRoute extends \Nette\Application\Routers\Route
{

    /** @var PostManager
     * @inject */
    public $postManager;

    public function match(Nette\Http\IRequest $httpRequest): ?array
    {
        $appRequest = parent::match($httpRequest);
        if (!isset($appRequest->parameters['postId'])) {
            return null;
        }
        $postId = $appRequest->parameters['postId'];
        if (!is_numeric($postId)) {
            $post = null;
            try {
                $post = $this->postManager->getPost()->get($postId)->slug;
            } catch (Nette\Application\BadRequestException $exc) {
                return null;
            }
            $appRequest->parameters['postId'] = $post->postId;
        }
        return $appRequest;
    }
}

?>

Mělo by to hledat šablonu detail.latte, místo toho mi to tam podstrkuje alias toho článku.
Kde prosím dělám chybu, děkuji

Editoval vanaveno (21. 8. 2020 21:50)

dakur
Člen | 493
+
0
-

@vanaveno Co myslíš tím „podstrkuje alias“?

vanaveno
Člen | 144
+
0
-

dakur napsal(a):

@vanaveno Co myslíš tím „podstrkuje alias“?

Díky za odpověď. Chtěl jsem dospět k tzv. pěkným url něo jako ../prvni-clanek-o-nicem. Tohle mi už fungovalo u verze postavené na nette 2.4 ale aktualizoval jsem to na nette 3 a ještě jsem to rozdělil na presentery Front a Admin.

Alias článku mi to na základě postId v url „podstrčí“ ale jaksi mi to hází error na neexistující latte šablonu.
Díky za pomoc

David Matějka
Moderator | 6445
+
+1
-

match vrací pole parametrů a ne request, takže $appRequest->parameters['postId'] nahraď za $appRequest['postId']

vanaveno
Člen | 144
+
0
-

David Matějka napsal(a):

match vrací pole parametrů a ne request, takže $appRequest->parameters['postId'] nahraď za $appRequest['postId']

Jo díky Davide, tuhle část jsem měl udělanou podle návodu Jana Smitka z youtubu, takže jsem to spíše bez pochopení okopčil, ale asi se to změnilo. Asi to bude někde v manuálu, že? Ten ještě tolik číst neumím.

David Matějka
Moderator | 6445
+
+2
-

je to v migration guide