PHP cli nette – <h1>Method is not implemented</h1>

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

Ahoj,

mam takovy problem podle navodu si nastavil bootstrat vytvoril jsem si presenter Console:

<?php
class ConsolePresenter extends BasePresenter {

	public function renderDefault() {
		echo 'test';
	}

}
?>

Ale pokud zapnu skript z cmd vystup > php -f index.php console je: <h1>Method is not implemented</h1>. Nevite kdy by mohla byt chybka?

Editoval radecek (9. 4. 2011 16:57)

srigi
Nette Blogger | 558
+
0
-

V tom navode je CliRouter nakonfigurovany spolocne s http routerom. Priznam sa, ze mne sa nepaci kombinovat do jedneho Presentera cli aj HTTP akcie. Nakonfiguruj si CliRouter samostatne.

app/bootstrap.php

// bla bla bla

$router = $application->getRouter();
$application->onStartup[] = function() use ($router) {
    $router[] = new Route('index.php', 'Front:Default:default', Route::ONE_WAY);
    // $router[] = new Route('console/<action>', 'Console:default', Route::ONE_WAY);  // ak kces testovat Console z browsera

    // Admin routes
    $router[] = $adminRouter = new MultiRouter('Admin');
    $adminRouter[] = new Route('admin/<presenter>/<action>[/<id>]', 'Default:default');

    // Front routes
    $router[] = $frontRouter = new MultiRouter('Front');
    $frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Default:default');
};

if (Environment::isConsole()) {
    $application->allowedMethods = NULL;
    $router[] = new CliRouter(array(
        'action'=>'Console:default',
    ), Route::ONE_WAY);
}

$application->run();

Z konzoly staci prejst do zlozky s index.php a zavolat php -f index.php a hned sa vykona ConsolePresenter::actionDefault() Ak kces volat ine metody, normalne ich routuj ako v sablonach: php -f index.php Console:foo.

Editoval srigi (9. 4. 2011 20:14)

radecek
Člen | 23
+
0
-

No zjistli jsem jako kdyby nejak nefungovala adresarova struktura.. Bootstrap vlozil, zkousel jsem si neco vypsat a to slo.. Ale nenasel conf soubor ani dibi..

Patrik Votoček
Člen | 2221
+
0
-
// nejdulezitejsi je:
if (Environment::isConsole()) {
    $application->allowedMethods = NULL;
}
radecek
Člen | 23
+
0
-

Patrik Votoček napsal(a):

// nejdulezitejsi je:
if (Environment::isConsole()) {
    $application->allowedMethods = NULL;
}

No to tam mam :)Nebo tam se musi definovat nejaky seznam metod?

radecek
Člen | 23
+
0
-

Tak jsem zkusil toto:

<?php
	$app = Nette\Environment::getApplication();
	$app->allowedMethods[] = Nette\Environment::getHttpRequest()->getMethod();
?>

Ale stejne to nejde.. Zvlastni ze prikaz: > php -f index.php Console, hlasi chybi v HomePresenteru..

Patrik Votoček
Člen | 2221
+
0
-

ah tak to neni NULL ale FALSE

// nejdulezitejsi je:
if (Environment::isConsole()) {
    $application->allowedMethods = FALSE;
}
radecek
Člen | 23
+
0
-

No s false se to pusunulo kupredu asi.. Ale stejne te mi nacita HomePresenter:

D:\www\jh\www>php -f index.php Console

Fatal error: Class 'BasePresenter' not found in D:\www\jh\app\presenters\HomePre
senter.php on line 3
exception 'FatalErrorException' with message 'Class 'BasePresenter' not found' i
n D:\www\jh\app\presenters\HomePresenter.php:3
Stack trace:
#0 [internal function]: Nette\Debug::_shutdownHandler()
#1 {main}
Patrik Votoček
Člen | 2221
+
0
-

ukaz definici CliRouteru jinak se dal nepohneme…

radecek
Člen | 23
+
0
-
<?php
if (Environment::isConsole()) {
  $application->allowedMethods = false;
  $router[] = new CliRouter(array('action' => 'Console:default',), Route::ONE_WAY);
}
?>
Patrik Votoček
Člen | 2221
+
0
-

vyhoď to Route::ONE_WAY

radecek
Člen | 23
+
0
-

Furt stejna chyba..

radecek
Člen | 23
+
0
-

To by nemelo vadit ze mam nette s namespace ze?

srigi
Nette Blogger | 558
+
0
-

Nie nemalo. ConsolePresenter by si mal mat v app/presenters, co su Presentery v globalnom namespace. Pocuj, ak sa mi bude velmi kciet, mozem ti poslat nejake demo, kde to bezi eňňo-ňuňo, co ty na to?

Milo
Nette Core | 1283
+
0
-

Nepoužíváš nějaký akcelerátor? Párkrát se mi stalo, že PHP kvůli tomu vyhazovalo chybějící knihovny.

radecek
Člen | 23
+
0
-

srigi: To demo by se mi hodilo.. Pokud to nekam nahrajes budu ti moc vdecny..

milo: Mam standartni xampp nejnovejsi verzi..

Editoval radecek (11. 4. 2011 19:16)

Pavel Kouřil
Člen | 128
+
0
-

Zrovna předevčírem jsem si Cli rozcházel. :)
Mám to v Bootstrapu dle srigiho (i s NULL a ROUTE::ONE_WAY) a funguje to (s tím, že Console presenter mi dědí od BasePresenteru, v \ namespacu).

Jinak – kdybych chtěl, abych zadával v cmd php index.php Presenter:action, nicméně to bralo jen prezentery z ConsoleModule; musel bych si na to napsat vlastní router celý? Abych nemusel psát cestu stylem :Console:Presenter:Action …

srigi
Nette Blogger | 558
+
0
-

Ok, tu je to minimalne demo. Vyrobene je z examples/modules-usage, aby demonstrovalo pouzitie v modularnej aplikacii. Odskusane, chodi:

php -f index.php ConsolePresenter::actionDefault()
php -f index.php Console:test ConsolePresenter::actionTest()
radecek
Člen | 23
+
0
-

Bezva nevim kde bych byla chyby ale hlavni ze to funguje tvuj projekt jsem pouzil jako sablonu a upravil podle potreby :)

Jen takovy mali detail.. Pri volani php z konzole se nevytvari http hlavicky, takze nette nedokaze zjistit jeslti ma nacist z konfigu testovaci nebo ostrou verzi db.. ([production < common]) Ono to selhalva i u dalsich konfiguraci, jako IMAP atd.. Podle navodu jsem zkousel podstrcit hlavicky, ale nic to neudelalo.. Volam to teda ve win cmd, ale to by vadit nemelo ze?

honzap
Člen | 5
+
0
-

Pajka napsal(a):
Jinak – kdybych chtěl, abych zadával v cmd php index.php Presenter:action, nicméně to bralo jen prezentery z ConsoleModule; musel bych si na to napsat vlastní router celý? Abych nemusel psát cestu stylem :Console:Presenter:Action …

Tak jsem právě taky rozcházel. Původně jsem chtěl udělat do bootstrapu prasečinku s nastavením $_SERVER[‚argv‘], ale pak jsem si vzpomněl na MultiRouter:

$module = $router[] = new Nette\Application\MultiRouter('Console');
$module[] = new Nette\Application\CliRouter(
	array('action' => 'Default:default'),
	Nette\Application\Route::ONE_WAY
);

P.S.: Konzoli se mi podařilo rozjet úplně bez problémů (Nette rev#e2dc23f191)

zapp
Člen | 32
+
0
-

srigi napsal(a):

Ok, tu je to minimalne demo. Vyrobene je z examples/modules-usage, aby demonstrovalo pouzitie v modularnej aplikacii. Odskusane, chodi:

php -f index.php ConsolePresenter::actionDefault()
php -f index.php Console:test ConsolePresenter::actionTest()

Mohl bych poprosit o demo, jestli je to ještě možné? Link je neplatný.