Různé hodnoty parametrů u souvisejících handle a render funkcí

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

Zdravím. Setkal jsem se s problémem, že se mi nepřekresluje invalidovaná komponenta. Zjistil jsem, že hodnota parametru ID ve zpracování signálu je správná, ale když se dostane na render fázi, změní se z hodnoty ID pro komponentu na hodnotu ID pro presenter. Generovaný odkaz je: …?diskuze-id=34&id=26&action=sbor&do=diskuze-odemknout&presenter=Sbory Nevíte někdo, čím to může být? Verze nette 0.9.6. Děkuji mnohokrát za rady.

<?php
class BasePresenter extends Presenter
{
	protected function startup()
	{
		$diskuze = new DiskuzeControl($this, 'diskuze');
		parent::startup();
	}
}

class DiskuzeControl extends BaseControl // registruji zde helpery pro šablonu
{
	public function __construct(IComponentContainer $parent, $name)
	{
		parent::__construct($parent, $name);
	}

	public function handleZamknout($id)
	{
		Debug::dump($id); // vrátí hodnotu ID pro komponentu
		$this->render = 'zamknout';
		$this->model->zamknout($id);
		$this->invalidateSnippet('zamykani'.$id); // snippet má id "snippet-diskuze-zamykani34"
	}

	public function render($id)
	{
		Debug::dump($id); // vrátí hodnotu ID pro presenter
		if($this->render == 'zamykani') $this->renderZamykani($id);
		else $this->renderDiskuze($id);
	}

	public function renderZamykani($id)
	{
		...
	}
}
?>
Milanov
Člen | 51
+
0
-

Řešením je v render funkci ihned na začátku změnit ID pomocí $id = $this->getParam(id);. Nicméně někde bude nějaká bota.

phx
Člen | 651
+
0
-

Render volas ty nekde v sablone a to co tam predas je asi tvoje vec ne?

{control diskuze 10}
// nebo
{$control['diskuze']->render(10)}