Do odeslaného formuláře nedostanu persistent proměnou

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

Ahoj,
mám takový problém.
Ukážu na klasickém případu editace článku.
V renderEdit() uložím do public proměné $editArt data o editovaném článku s kterými budu pracovat dále.
V componentě EditArtForm není problém ale když odešlu formulář ⇒ tzn po odkázání na funkci editArtFormSubmitted už proměná $this->editArt je prázdná.
Chtěl sem z toho číst ID který článek má být editován.
Níže kod.

Možná nechápu danou situaci nevíte někdo jak toto řešít? Používám nejnovější Nette Framework 2.1-dev pro php 5.3
`

class ArticlePresenter extends BasePresenter {
    private $articles;

    /** @persistent */
    public $editArt;

    	function __construct(Model\ArticlesRepository $articles)
	{
            $this->articles = $articles;
	}

	public function renderEdit($id)
	{
                $this->editArt = $this->articles->getById($id);
	}

	protected function createComponentEditArtForm()
	{
                $art = $this->editArt; // tady data do $art dostanu

                $form = new UI\Form();
		....
		$form->onSuccess[] = callback($this, 'editArtFormSubmitted');

		return $form;
	}

	public function editArtFormSubmitted(UI\Form $form)
	{
		$vals = $form->getValues();

                $art = $this->editArt; // tady už data do $art nedostanu

		$this->articles->edit(
                        $art['id'], // vrací NULL
                        ...
		);
	}
}
David Matějka
Moderator | 6445
+
0
-

persistuj parametr id, ne editArt, do kteryho ukladas instanci activerow

spideboy
Člen | 12
+
0
-

matej21 napsal(a):

persistuj parametr id, ne editArt, do kteryho ukladas instanci activerow

to už sem skusil uložit do te proměné jen id ale pořád dotaz končí.. WHERE (id IS NULL)

David Matějka
Moderator | 6445
+
0
-

editArt se vlastne jeste musi naplnit v actionEdit a ne renderEdit (zivotni cyklus aplikace, dneska uz se to tu myslim resilo..)

takze asi takhle:

class ArticlePresenter extends BasePresenter {
    private $articles;

    /** @persistent */
    public $id;

    protected $editArt;

        function __construct(Model\ArticlesRepository $articles)
    {
            $this->articles = $articles;
    }

    public function actionEdit($id)
    {
                $this->editArt = $this->articles->getById($id);
    }

    protected function createComponentEditArtForm()
    {
                $art = $this->editArt;

                $form = new UI\Form();
        ....
        $form->onSuccess[] = callback($this, 'editArtFormSubmitted');

        return $form;
    }

    public function editArtFormSubmitted(UI\Form $form)
    {
        $vals = $form->getValues();

                $art = $this->editArt;

        $this->articles->edit(
                        $art['id'],
                        ...
        );
    }
}
Tomáš Votruba
Moderator | 1114
+
0
-

Tak tak, ještě odkážu na Planette

spideboy
Člen | 12
+
0
-

Super :) díky za radu