PHP cli nette – <h1>Method is not implemented</h1>
- radecek
- Člen | 23
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
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)
- Patrik Votoček
- Člen | 2221
// nejdulezitejsi je:
if (Environment::isConsole()) {
$application->allowedMethods = NULL;
}
- Patrik Votoček
- Člen | 2221
ah tak to neni NULL
ale FALSE
// nejdulezitejsi je:
if (Environment::isConsole()) {
$application->allowedMethods = FALSE;
}
- radecek
- Člen | 23
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}
- Pavel Kouřil
- Člen | 128
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
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
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
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
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ý.