Page not found. Missing template app/Front/templates/Gallery/1-clanek.latte
- vanaveno
- Člen | 144
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)
- vanaveno
- Člen | 144
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
match vrací pole parametrů a ne request, takže
$appRequest->parameters['postId']
nahraď
za $appRequest['postId']
- vanaveno
- Člen | 144
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.