module, problem s presenterom

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

Zdravim,
prerobil som si aresarovu strukturu a potom mi hadze tanto error: Cannot load presenter ‚Front:Homepage‘, class ‚FrontModule\HomepagePresenter‘ was not found in ‚CESTA ../app/FrontModule/presenters/HomepagePresenter.php‘.

neviem ze kde je chyba, tak prikladam aspon $router

<?php
// Step 4: Setup application router
$router = $application->getRouter();

$router[] = new Route('index.php', array(
	'module' => 'Front',
	'presenter' => 'Homepage',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('<presenter>/<action>/<id>', array(
	'module' => 'Front',
	'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
));
?>

dakujem za pomoc

arron
Člen | 464
+
0
-

Predpokladam, ze pouzivas PHP 5.3 a Nette pro PHP 5.3. Chyba se zda byt v tom, ze HomepagePresenter neni ve jmennem prostoru FrontModule. Zkus na zacatek prislusneho souboru (za znacku <?php) pridat namespace FrontModule;

David Ďurika
Člen | 328
+
0
-

ano zrejme to pomohlo (mozes mi pls napisat ze preco to tam ma byt? alebo nejake linky kde si o tom mozem nico precitat, dik)

a teraz mi hlasi toto:
Class ‚FrontModule\BasePresenter‘ not found

je to zrejme preto lebo Homepage subor je potomkom BasePresentera (po starom som to mal tak) ale teraz ho zrejme nevie najst…

<?php
namespace FrontModule;
use Nette\Application\AppForm;

class HomepagePresenter extends BasePresenter
{
...
}
?>

Editoval achtan (18. 12. 2010 18:38)

figi
Člen | 9
+
0
-

Zdravím,
v práci s Nette jsem naprostý začátečník a tak jsem si z tutoriálů stáhl příklad ‚Statické ACL v modulárnej aplikácii‘. Jelikož mi hostitel neumožňuje přístup do nadřízené složky, tak mám adresáře app, temp a log umístěny v rootu www stránek.

Po spuštění v prohlížeči vše funguje jak má. Problém nastane, když cokoliv změním v souboru app/AdminModule/presenters/DefaultPresenter.php:

<?php
namespace AdminModule;
use Nette;
class DefaultPresenter extends \BasePresenter
{

}
?>

Definici třídy jsem přepsal na:

<?php
...
final class DefaultPresenter extends \BasePresenter {
...
?>

Po uložení mi laděnka hlásí v tomto souboru na řádku 2 chybu:
Namespace declaration statement has to be the very first statement in the script.

Poradí mi někdo v čem by mohl být problém?

Nette provozováno na:
Server system: Linux nibiru 2.6.26–2–686 #1 SMP Tue Mar 9 17:35:51 UTC 2010 i686
Apache version: Apache/2.2.9 (Debian) PHP/5.3.3–0.dotdeb.1 with Suhosin-Patch
PHP version: 5.3.3–0.dotdeb.1
Nette version: 2.0 Alpha 2 pro PHP5.3

Předem moc díky.
Filip

Aurielle
Člen | 1281
+
0
-

Stačí si chybu přeložit :)
„Deklarace namespace musí být prvním příkazem skriptu.“

figi
Člen | 9
+
0
-

Chybovou hlášku jsem si samozřejmě přeložil, ale to na problému nic neřeší.
Jak jsem již psal v prvním dotazu…soubor
app/AdminModule/presenters/DefaultPresenter.php začíná…

<?php
namespace AdminModule;
...
?>

Z toho je zřejmé, že to po mě chce něco, co je splněno. ;-)

Editoval figi (19. 12. 2010 13:37)

Aurielle
Člen | 1281
+
0
-

Ukaž z toho souboru víc…

figi
Člen | 9
+
0
-

Tohle je celé…
app/AdminModule/presenters/DefaultPresenter.php:

<?php
namespace AdminModule;
use Nette;
final class DefaultPresenter extends \BasePresenter
{

}
?>

Je to originál souboru z příkladu (viz výše). Do originálu jsem doplnil pouze klauzuli final před deklaraci třídy presenteru. Jakmile v tom originálním souboru cokoliv změním, tak to začne vyhazovat výše uvedenou hlášku. A i když všechny změny vymažu a uložím, tak to pořád hází tuto chybu. Pomůže jedině opětovné zkopírování a přepsání originálním souborem z příkladu. ;-(

Aurielle
Člen | 1281
+
0
-

BOM? Nějaký jiný příkaz před namespace?

figi
Člen | 9
+
0
-

NIC! To je celý obsah souboru…akorát v něm není ukončovací značka ?>. Tu jsem uvedl jen zde na fóru, aby se to zobrazilo v okně pro kod. ;-)

westrem
Člen | 398
+
0
-

Este raz sa spytam za gmvaska – BOM ? pripadne nepusta sa na vystup nieco ine pred includovanim tohto suboru – to by mohlo tiez vadit.

figi
Člen | 9
+
0
-

Napřed se musím omluvit a opravit. Testovaným příkladem je **NetteFramework-2.0dev-PHP5.3\examples\Modules-Usage**.
Jinak platí vše co jsem již psal. Pouze jsem upravil cesty k adresářům v index.php. Vše fungovalo.
Když si vypnu laděnku, tak jsem ve zdojovém kódu v prohlížeči žádné znaky odpovídající BOM nenašel. Příklad se po vypnutí laděnky zobrazil, akorát bez odkazu do AdminModulu.

Editoval figi (19. 12. 2010 15:23)

figi
Člen | 9
+
0
-

Zdá se, že jsem na to přišel. Problém bude v PS Padu, který používám k editování scriptů. Když jsem zkusil soubor pouze otevřít a uložit, tak to způsobí výše zmiňovanou chybu.
Tak jsem zkusil soubor editovat přes total commander a funguje to normálně. Nenapadá někoho čím by to mohlo být? Popřípadě doporučit vhodný editor pro Nette, abych se s tímto problémem trápit. ;-)

Filip Procházka
Moderator | 4668
+
0
-

netbeans, aspoň pro začátek ;)

Editoval HosipLan (19. 12. 2010 16:50)

figi
Člen | 9
+
0
-

Díky. Už ho stahuju. Tak snad s ním nebudou takový problémy. ;-)

David Ďurika
Člen | 328
+
0
-

este sa vratim k mojmu problemu lebo dajako sme odbocili :)
mam takuto adresrovu strukturu cize ten priblem som vyriesil takto:

<?php
...
class HomepagePresenter extends BasePresenter
...
?>

zmenene na toto

<?php
...
class HomepagePresenter extends \BasePresenter
...
?>

ale aj tak mi to hadze dalsie errory ked volam napr:

<?php
$allPostsData = PostsModel::fetchAll();
?>

lebo adresar s modelmy je o jednu uroven visie ako adresar s presenterom. (adresrova struktura)
samozrejme tento zapis to riesi:

<?php
$allPostsData = \PostsModel::fetchAll();
?>

ale neslo by to vyriesit aj nejak inac jednotne, aby smo nemusel pre kazde volanie modelu riesit zapisom \NameModel

Ondřej Brejla
Člen | 746
+
0
-

Doporučuji nastudovat PHP 5.3 namespaces.