quickstart – nefunkční odkaz na příspěvek
- u0112358
- Člen | 10
Ahoj,
začínám s nette vlastně i s php a narazil jsem na problém hned
v úvodní ukázkové aplikaci. Všechno funguje až do chvíle kdy vytvořím
v seznamu příspěvků odkazy na zobrazení konkrétního příspěvku.
Vygenerovaný odkaz směřuje na http://localhost/…ww/post/show?… , kde se mi zobrazí
404 Not Found, přitom by se měl zobrazit buď příspěvek nebo třeba Tracy.
Už se s tím mořím druhý den. Kód bych měl mít přesně podle
návodu.
- Pavel Janda
- Člen | 977
Mohl bys sem hodit jen ukázku Routeru, Presenteru a template, kde vytváříš odkaz?
Pokud se ti nezobrazuje Tracy, nejsi v „debug modu“, ale v produkčním režimu apliakce
Editoval Beton (7. 4. 2015 16:01)
- u0112358
- Člen | 10
templates/Homepage/default.latte:
{block content}
<h1 n:block="title">Můj blog</h1>
{foreach $posts as $post}
<div class="post">
<div class="date">{$post->created_at|date:'F j, Y'}</div>
<h2><a href="{link Post:show $post->id}">{$post->title}</a></h2>
<div>{$post->content}</div>
</div>
{/foreach}
{/block}
presenters/PostPresenter.php:
<?php
namespace App\Presenters;
use Nette,
Nette\Application\UI\Form;
class PostPresenter extends BasePresenter
{
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderShow($postId)
{
$this->template->post = $this->database->table('posts')->get($postId);
}
}
templates/Post/show.latte:
{block content}
<p><a n:href="Homepage:default">← zpět na výpis příspěvků</a></p>
<div class="date">{$post->created_at|date:'F j, Y'}</div>
<h1 n:block="title">{$post->title}</h1>
<div class="post">{$post->content}</div>
- Pavel Janda
- Člen | 977
Ještě sem zkus hodit Router. Pokud budeš mít v Routeru parametr <id> a ne <postId>, tak to bude možná místo, kde to padá.
- David Matějka
- Moderator | 6445
Je to 404 od nette nebo od apache? Pokud od apache, tak
- zkontroluj, zda mas zapnuty mod rewrite
- zkus odkomentovat, pripadne upravit RewriteBase v htaccess
- Pavel Janda
- Člen | 977
u0112358 napsal(a):
Jiný kód jsem nepsal, tzn. nevím, kde bych měl Router hledat.
Aha. Jedeš podle sandboxu? Potom si otevři app/router/routerFactory.php, bude tam něco takového:
...
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
...
Ten aprametr <id> ti určuje jméno parametru. Tvůj Presenter ale přijímá parametr jménem $postID.
Udělej tyto změny
- Router
public function renderShow($id)
{
$this->template->post = $this->database->table('posts')->get($id);
}
- Mělo by to již fungovat, já bych však pro lepší přehlednost upravil ještě tuto řádku:
<a href="{link Post:show, id => $post->id}">{$post->title}</a>
Editoval Beton (7. 4. 2015 16:23)
- David Matějka
- Moderator | 6445
zeptam se jeste jednou, je to 404 od apache nebo od nette? jestli od apache, vubec neres routovani v nette – bude asi problem v htaccess.. hledej na foru, resilo se to tu xkrat