Ako vytvárať linky v CLI?

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

Zdravím, postupoval som podľa tohto návodu

https://pla.nette.org/cs/routovani-v-cli

V bootstrape si vytváram httpRequest:

if ($container->params['consoleMode']) {
	$container->removeService('httpRequest');
	$container->addService('httpRequest', function() {
		$uri = new UrlScript;
		$uri->scheme = 'http';
		$uri->port = 80;
		$uri->host = 'localhost';
		$uri->path = '/fleetlog/www/';
		$uri->canonicalize();
		$uri->path = Strings::fixEncoding($uri->path);
		$uri->scriptPath = '/';
		return new Http\Request($uri, array(), array(), array(), array(), array(), 'GET', null, null);
	});

	$container->application->allowedMethods = FALSE;
    $container->router[] = new CliRouter(array('action' => 'Reminders:default'));
} else {

V command line potom volám action:

php5 www/index.php Reminders:CheckRemindersStatus

a action v RemindersPresentery vyzerá takto:

public function actionCheckRemindersStatus()
	{
	echo $this->link("//:Main:Sign:in");
	....
	$this->terminate();
	}

Lenže echo vracia stále len odkaz #

Keď si vypíšem servis httpRequest, všetko je tak nastavené ako v bootstrape.

Vedel by mi niekto s tým pomocť ? už mi to dlhšie robí problémy. Dakujem

David Matějka
Moderator | 6445
+
0
-

a v ne-cli modu se ti ten odkaz vytvori? zkus si pro cli rucne zapnout debug mod, pripadne zapni prisnejsi mod pro nevalidni linky – sem nastav treba https://api.nette.org/…ter.php.html#45 a ono ti to rekne, co to bylo za chybu

nebo mrkni na kdyby/console ktere resi CLI :)

Filip Procházka
Moderator | 4668
+
0
-

To je jednoduché, stačí použít kdyby/console, ale ta nepoužívá presentery nýbrž Command classy. Všechno je výborně vysvětleno v Symfony dokumentaci.

erzzo
Člen | 49
+
0
-

Filip Procházka napsal(a):

To je jednoduché, stačí použít kdyby/console, ale ta nepoužívá presentery nýbrž Command classy. Všechno je výborně vysvětleno v Symfony dokumentaci.

Tak dnes som sa už k tomu konečne dostal, kdyby konzola funguje, ale ako tam mám potom generovať tie linky (aby som ich potom mohol vyvolávať v šablone emailu)?

Priklad:

$this->link("//:Main:Sign:in");

Editoval erzzo (13. 1. 2014 13:27)

Filip Procházka
Moderator | 4668
+
0
-

Dejme tomu že jsi v Command classe

protected function execute(InputInterface $input, OutputInterface $output)
{
	// helper container zpřístupňuje DI container
	$app = $this->getHelper('container')

	// tato metoda mi vrátí service konkrétního typu
		->getByType('Nette\Application\Application');

	// z aplication si vytáhnu presenter
	$presenter = $app->getPresenter();

	// vygeneruju odkaz
	$output->writeLn($presenter->link('//:Main:Sign:in'));

	return 0;
}
Quinix
Člen | 108
+
0
-

Filip Procházka: Je nějaký důvod pro4 nepoužít přímo PresenterHelper? Tzn.

$this->getHelper("presenter")->getPresenter()->link(...);

je to kratší :-)

Editoval Quinix (13. 1. 2014 21:48)

Filip Procházka
Moderator | 4668
+
0
-

Fun fact: zapomněl jsem že ho tam mám :)

erzzo
Člen | 49
+
0
-

Super toto mi ide, linky v emaily fungujú, ešte posledná otázka. V configu mám:

console:
	url: 'http://xxxx/login/'

lenže linky generuje bez pathu „login“. Ako na to ? na servery by mi to nefungovalo

Filip Procházka
Moderator | 4668
+
0
-

A máš dobře routování? Na když dáš generovat stejný link z webu vygeneruje to správný?

David Matějka
Moderator | 6445
+
0
-

@Filip Procházka: nemel bys v https://github.com/…tFactory.php v setFakeRequestUrl nastavovat scriptPath?

Editoval matej21 (15. 1. 2014 0:29)

erzzo
Člen | 49
+
0
-

Tak routovanie mám nastavené. Asi treba to spraviť čo napisal @matej21. Ako dnes som sa dozvedel, že to nebude problém, lebo aj sak server meníme na

http://login.xxx.com miesto http://xxxx/login/

Ako možno to do budúcna niekomu bude treba, neviem. Dík pekne všetkým