Objekt nenalezen! Error 404
- icanjan
- Člen | 30
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.
- Oli
- Člen | 1215
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
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>
- icanjan
- Člen | 30
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
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
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
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
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
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
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
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
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
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.