Control vygeneruje špatný link

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

Zdravím,

v presenteru volám Control, který vracím do komponenty a následně využívám v šabloně. V Controlu se generuje signál link, jenže se vygeneruje špatně.

Jsem na adrese .../payment/64d09026637fa6736a6164879b40746096969484.1 ale Control vrací link .../payment/default?do=Control-signal. Přitom bych očekával link v této podobě .../payment/64d09026637fa6736a6164879b40746096969484.1?do=Control-signal

Napadá Vás něco? Děkuji předem za reakce.

Editoval emptywall (28. 6. 2016 12:30)

Barvoj
Člen | 60
+
+2
-

Asi by neškodilo napsat nějaký kód :) Takhle z hlavy mě napadá akorát.. jestli to 64d09026637fa6736a6164879b40746096969484.1 je nějaký identifikátor? Máš ho v prezenteru nastavený jako persistent?

Michal Hlávka
Člen | 190
+
0
-

No nějak jsem doufal, že v tomhle případě to bude srozumitelně vysvětlený. Když ten Control prostě generuje link na adrese /payment/64d09026637fa6736a6164879b40746096969484.1 tak vůbec parametry v routě (<hash>.<id>) nezahrne do generovani linku.

Michal Hlávka
Člen | 190
+
0
-

Teď zjišťuji, že nebude chyba v Controlu. Routu mám postavenou takhle.

			$router[] = new Route('//[!<subdomain (www|devel|www.devel)>].[!<domain [a-zA-Z0-9-]+>].[!<tld [a-zA-Z0-9-]+>]/payment/<hash>.<orderId [0-9]+>', [
    'lang' => 'en',
    Route::MODULE_KEY => 'Front',
    Route::PRESENTER_KEY => 'Payment',
    'action' => 'default',
    'subdomain' => $domainMap['subdomain'],
    'domain' => $domainMap['domain'],
    'tld' => $domainMap['tld'],
]);

ta se mě matchne a momentálně na ní jsem. Spustí mi presenter Payment a v akci default udělám tohle.

	public function renderDefault()
{
    var_dump($this->link('this')); die();
}

dump mi vrátí string(16) "/payment/default"

Michal Hlávka
Člen | 190
+
0
-

@Barvoj bylo to persistentem, díky.

Barvoj
Člen | 60
+
+1
-

Ano automaticky se tam ty parametry nezahrnou. Máš 2 možnosti:

  1. udělat je v presenteru persistentní:
class PaymentPresenter {
	/** @persistent */
	public $hash;

	/** @persistent */
	public $id;
}

nebo

2.) uvést je v renderDefault..

public function renderDefault($hash, $id)
{
	...
}