quickstart – nefunkční odkaz na příspěvek

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
u0112358
Člen | 10
+
-1
-

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

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

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

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

Je to 404 od nette nebo od apache? Pokud od apache, tak

  1. zkontroluj, zda mas zapnuty mod rewrite
  2. zkus odkomentovat, pripadne upravit RewriteBase v htaccess
u0112358
Člen | 10
+
0
-

Jiný kód jsem nepsal, tzn. nevím, kde bych měl Router hledat.
Každopádně Tracy mi jinak běží.

Pavel Janda
Člen | 977
+
0
-

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

  1. Router
public function renderShow($id)
    {
        $this->template->post = $this->database->table('posts')->get($id);
    }
  1. 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)

u0112358
Člen | 10
+
0
-

Asi si budu nejdřív muset nastudovat apache konfiguraci, možná bude opravdu problém tam. Mod_rewrite jsem každopádně kontroloval přes php_info(). Díky zatím za reakce.

u0112358
Člen | 10
+
0
-

Beton: No jasný, na to už jsem narazil, takže co s tím?

u0112358
Člen | 10
+
0
-

Ok, upravil jsem a nějak to furt nefachá. Ale alespoň jsem pochopil, kde se to routuje. Ještě to zkouknu a snad si s tím nějak poradím, nechci vás prudit se základy.

David Matějka
Moderator | 6445
+
0
-

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

u0112358
Člen | 10
+
0
-

od apache
ok, tak se mrknu, když vím co hledat

u0112358
Člen | 10
+
0
-

Nette Framework Requirements Checker:
.htaccess mod_rewrite Disabled

Takže to bude ten problém…

u0112358
Člen | 10
+
0
-

Díky všem moc, vyřešeno povolením .htaccess souborů v configuraci serveru
A omlouvám se, že jsem dřív nenarazil na FAQ a Requirements Checker, možná by nebylo na škodu hodit odkaz na FAQ i sem do fóra

F.Vesely
Člen | 369
+
0
-

Hned prvni odstavec z QuickStart:

Úplně první věc, kterou bychom měli udělat, je zkontrolovat, zda náš server splňuje požadavky pro
běh Nette Frameworku. To by s největší pravděpodobností mělo být v pořádku, ale jen pro jistotu,
nechceme začínat na nefunkčním prostředí.

u0112358
Člen | 10
+
-2
-

ok, tomu jsem nevěnoval pozornost, nějak jsem to přehlédl, moje chyba