Objekt nenalezen! Error 404

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

Zdravím, pracuji s nette druhý den a snažím se rozjet ukázkový příklad, ale nefungují mě linky. Ani po projití fora mě žádné rady nepomohly :-(. Pracuji na win.
v localweb\projects\ mám nette-blog
Když si na hlavní stránce udělám odkaz dostanu:

Objekt nenalezen!

Požadované URL nebylo na tomto serveru nalezeno. Zdá se, že odkaz na odkazující stránce je chybný nebo zastaralý. Informujte, prosím, autora této stránky o chybě.

Pokud si myslíte, že toto je chyba serveru, kontaktujte, prosím, webmastera.
Error 404
localhost
Apache/2.4.7 (Win32) PHP/5.4.24

Zde je vytvoření linku:

<h2><a n:href="Post:show $kapela->id">{$kapela->jmeno}</a></h2>

PostPresenter jsem jen zkopíroval i show.latte (a upravil proměnné). Velikosti písmenek jsem ověřil i umístění, že je správné.

Zde je část httpd.config (uložený v binaries/conf_files) kde se nastavují ty direktivy pro .htaccess

<Directory />
    AllowOverride none
    Require all denied
</Directory>

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "${path}/data/localweb"

# This should be changed to whatever you set DocumentRoot to.
# ======================================================
# !!! DO NOT CHANGE THIS LINE AND THE FOLLOWING ONES !!!
# DocumentRootDirectory
<Directory "${path}/data/localweb">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted

</Directory>

a zde .htaccess

# Apache configuration file (see httpd.apache.org/docs/current/mod/quickreference.html)

# disable directory listing
<IfModule mod_autoindex.c>
	Options -Indexes
</IfModule>

# enable cool URL
<IfModule mod_rewrite.c>
	RewriteEngine On
	# RewriteBase /

	# prevents files starting with dot to be viewed by browser
	RewriteRule /\.|^\. - [F]

	# front controller
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>

# enable gzip compression
<IfModule mod_deflate.c>
	AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>

mod_rewrite mám snad povolený? v httpd.conf je řádek (odkomentovaný)

LoadModule rewrite_module modules/mod_rewrite.so

Strávil jsem celý dne pročítáním netu a diskuzí, ale nic mě nepomohlo, tak už to zkouším dotazem.
Předem díky za jakékoliv nápady.

Šaman
Člen | 2666
+
0
-

Mod rewrite poznáš, když si spustíš requirement checker z distribuce.
Zkus nejdřív jednoduchý odkaz bez parametrů, třeba to jen nemhže najít tu kapelu.

Oli
Člen | 1215
+
0
-

Podivej se na Requirements-Checker, ten ti řekne přesně, jestli máš mod_rewrite povolený a jestli tam není nějaký jiný problém.

icanjan
Člen | 30
+
0
-

mod_rewrite mám povolený, checker to potvrdil. Zkusil jsem odkaz bez parametru a taky to nepomohlo :-(
Uvádím ještě přímo zdojáky.

snipped v HomapagePresenter.php

public function renderDefault()
{
	$this->template->kapely = $this->database->table('kapely')->limit(5);
}

defaul.latte

{foreach $kapely as $kapela}
<div class="post">

    <h2><a n:href="Post:show">{$kapela->jmeno}</a></h2>
</div>
{/foreach}

PostPresenter.php

public function renderShow($postId)
{
	$this->template->kapela = $this->database->table('kapely')->get($postId);
}

show.latte

{block content}

<div class="date">{$kapela->name}</div>
David Matějka
Moderator | 6445
+
0
-

Zkus si odkomentovat a spravne nastavit RewriteBase v .htaccess

icanjan
Člen | 30
+
0
-

To jsem už taky zkoušel, bez výsledku. Zkoušel jsem zadávat různé cesty, ale nepomohlo nic.
Projekt (.htaccess) mám uložen tady

C:\EasyPHP\data\localweb\projects\nette-blog\www\

nějaké konkrétní rady, jakou cestu bych tam měl dát?

Díky

icanjan
Člen | 30
+
0
-

Ještě jsem tady našel, že by mohlo pomoct nastavit scriptPath. Což mě taky nepomohlo, když jsem to v tom souboru /libs/Nette/Http/UrlScript.php změnil na /nette-blog/www/. Navíc mám podezření, že je to jen jiná alternativa k tomu RewriteBase. Ale nerozumím tomu. Dělám s nette, apachem a tím vším webovým kolem třetí den a zatím jsem z toho jen zoufalej…

David Matějka
Moderator | 6445
+
0
-

v tom rewrite base bych dal asi to, co je v URL path pokud jsi na uvodni strance sandboxu. Jestli mas ten sandbox na http://localhost/…tte-blog/www, tak bych zkusil RewriteBase /projects/nette-blog/www/

Nojo, to je ten vyvoj na win :) zkus kdyztak xampp, s tim jsem mel dobry zkusenosti, kdyz jsem pracoval na win.

Oli
Člen | 1215
+
0
-

Ja neměl dobrý zkušenosti ani s easyPHP (ten jsem snad ani nerozchodil), ani s XAMP (ten mě tak nějak neseděl).

Skoro perfektní zkušenosti mám ale s WAMP serverem. Je to server pro BFU a má jen jedinou nevýhodu, že na něj vývojáři už asi kašlou a zamrznul v PHP 5.4.4

Tak někdy během posledního měsíce/dvou (nevím kdy jsem se naposledy koukal) vyšla nová verze s PHP 5.5.12. To je skvělá zpráva :-)

icanjan
Člen | 30
+
0
-

to matej21: samozřejmě že jsem /projects/nette-blog/www/ zkoušel. I mnoho dalších možných i nemožných variant pro RewriteBase :-(

Zkusil jsem nainstalovat ten BFU WAMP. Nemít zkušenosti s vcredistama, tak to vzdám ještě dřív než to vůbec zkusím, když na mě vyskočila hláška o chybějícím dll. No a nějak to rozjet se mě tada během asi hodiny taky nepodařilo, takže bude spíš lepší odladit EasyPHP, když jsem s tím už zabil dva dny, než zabít další dva s WAMPem a skončit podobně :-(

Oli
Člen | 1215
+
0
-

icanjan: Zajímavé, instaloval jsem to asi 8× (na různé stroje, po reinstalaci win, …) a nikdy jsem nemel jedinej problem. Proste jsem nainstaloval a jelo to. :-) Ale je pravda, ze ted tam maji jen tu verzi s PHP 5.5, ktera prej neni zpetne kompatibilni a ze to muze zlobit. Muzu se podivat, jeslti nemam nekde jeste tu starou verzi s PHP 5.4, kdybyj si chtel. Me instalace nikdy netrvala dyl jak 5 min, tak bych ti ji poslal a mohl by jsi zkusit tech 5 min obětovat ;-)

qteck
Člen | 164
+
0
-

Já vyvíjím taky na windows a používám xampp.

Měl jsem podobný problém, před rokem jsem psal svojí první aplikaci v nette a před měsícem jsem s jí rozhodl trochu přepsat.

Problém nastal, když jsem natáhl kódy ze serveru na localhost, na xampp. odkazy nefungovaly. Všiml jsem si že je vypnutj mode_rewrite tak jsm ho zapnul a prd… Pak jsem se pokoušel ještě o psí kusy, ale taky nic nešlo.

Vyřešil jsem to tak, že jsem to celý smazal, stáhl si šablony a napsal celou novou obsluhu. Světe div se odkazy fungují.

Čím to bylo netuším, ale řekl že to není ani tolik chyba nastavení serveru jako problém nette s čímsi.

Šaman
Člen | 2666
+
0
-

XAMPP na Windows používám jak pro veškerý vývoj, tak už dva a půl roku při výuce ve škole a zatím jsem nenarazil na žádný problém. Nemá zapnutý jen MemCache a MIME, ale ty jsem zatím nepotřeboval. Každopádně mod_rewrite je tam už minimálně 4 roky, co to používám, zapnutý by default.

@icanjan: Hoď sem prosím celý (aspoň první půlku) výpis requirement checkeru (nebo vypiš co není zelené) a nasdílej projekt (ideálně GitHub, BitTracker), podívám se na to. Ideálně připrav ukázku nefugujícího odkazování na pohledech, které nevyužívají databázi, ať si ji nemusím u sebe zakládat.

P.S. Tak jsem si zkoušel hrát u sebe s RewriteBase a při špatném nastavení mi to háže stejnou hlášku. Není to Nette hláška, je to přímo od Apache. RewriteBase musí být nastavená buď správně, nebo, jak je to by default v sandboxu, zakomentovaná. Zkus ještě jednou použít .htaccess ze Sandboxu a promazat cache.
Jinak u tebe by nejspíš měla být:

RewriteBase /nette-blog/www

Editoval Šaman (4. 6. 2014 4:51)

icanjan
Člen | 30
+
0
-

Zelené není jen Fileinfo extension, Memcache extension a Fileinfo extension or mime_content_type().

Na tom mým kódu není co zkoumat. Jediné, co jsem udělal je, že jsem stáhl ten projekt příkazem:
composer create-project nette/sandbox nette-blog

v defailt.latte mám (po úplné redukci) jen:

{block content}
<h2><a n:href=„Post:show“>link</a></h2>

no a podle návodu jsem přidal jen PostPresenter a show.latte

Ještě co mě napadlo, že v url s tím errorem je:

http://localhost/…ww/namespace App;use Nette;class PostPresenter extends BasePresenter{ /** @var Nette\Database\Context */ public function renderShow($postId) { $this->template->kapela = $this->database->table(‚kapely‘)->get($postId); }}#error: Cannot load presenter ‚Post‘, class ‚App\Presenters\PostPresenter‘ was not found in ‚C:\EasyPHP\data\localweb\projects\nette-blog\app/presenters/PostPresenter.php‘.

Konkrténě si myslím, že by mohly být problém ty různé lomítka na konci v cestě k PostPresenteru.php. Ale nevím, jak se toho zbavit, když nikde tu adresu přímo nazadávám.

icanjan
Člen | 30
+
0
-

Zdá se, že vyřešeno. Zafungoval kamarád. Je to blbě natavený sandbox resp vzorový příklad. Viz https://github.com/…cs/issues/46

Díky všem zúčastněným.

Oli
Člen | 1215
+
0
-

Možná se to jen blbě vypsalo, ale máš v presenteru namespace App\Presenters?

On s tím totiž mám pocit počítá mapper presenterů v configu.

icanjan
Člen | 30
+
0
-

Už ano, viz můj poslední post. Diky