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
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
persistuj parametr id, ne editArt, do kteryho ukladas instanci activerow
- David Matějka
- Moderator | 6445
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'],
...
);
}
}