CLI aplikace – Best Practises
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- nanuqcz
- Člen | 822
Ahoj,
píšu teď jednu CLI aplikaci a narazil jsem na myšlenku, jak správně
napsat menu?
use Nette\Application\UI\Form,
Nette\Application\Request;
class MenusPresenter extends BasePresenter {
public function renderMenus() {
// Zobrazíme menu
echo "1) Foo \n";
echo "2) Bar \n";
echo "3) Baz \n";
echo "Vase volba: ";
// Přečteme uživatelovu volbu
$handle = fopen("php://stdin", "r");
$result = trim( fgets($handle) );
echo "\n";
// Spustíme požadovaný presenter
switch ($result) {
case '1':
$foosPresenter = new FooPresenter($this->context);
$foosPresenter->run( new Request('Foo', 'default', array()) );
break;
case '2':
$foosPresenter = new BarPresenter($this->context);
$foosPresenter->run( new Request('Bar', 'default', array()) );
break;
case '3':
$foosPresenter = new BazPresenter($this->context);
$foosPresenter->run( new Request('Baz', 'default', array()) );
break;
}
}
}
Tento způsob se mi moc nelíbí, protože po volbě např
FooPresenteru
a jeho spuštění běží najednou dva presentery
→ MenusPresenter
a FooPresenter
. Pokud ve
FooPresenteru
bude další menu, které bude spouštět další
presenter, tak se postupně můžeme dostat do stavu, kdy běží třeba
10 presenterů najednou a navzájem čekají na svoje ukončení.
Je toto správná cesta? Díky