formulář v samostatné komponentě
- trta911
- Člen | 35
Ahoj, mám drobný problém s daty formuláře po odeslání.
Mám samostatnou komponentu:
use Nette\Application\UI;
use Nette\Application\UI\Form;
use Nette\Http\Url;
class PollControl extends UI\Control
{
private $database;
private $questions;
public $pollID;
public function __construct( \Nette\Database\Context $database)
{
$this->database = $database;
}
public function render($pollID)
{
$poll = $this->database->table('poll')->where('id',$pollID)->where('enabled',1)->limit(1)->fetch();
$pollQ = $this->database->table('poll_question')->where('poll_id',$poll->id)->fetchPairs('id','question');
$this->pollID = $pollID;
$this->questions = $pollQ;
$this->template->poll = $poll;
$this->template->render(__DIR__ . '/PollControl.latte');
}
protected function createComponentPollForm()
{
$form = new Form;
$form->addRadioList('question','',$this->questions);
$form->addSubmit('submit', 'Hlasovat');
$form->onSuccess[] = [$this, 'pollSuccess'];
return $form;
}
public function pollSuccess(Form $form)
{
$values = $form->getValues();
$data = [
'ip' => '987.654.321',
'poll_id' => 1,
'poll_question_id' => $values['question']
];
}
}
a problém je, že po odeslání formuláře se sice provede, ale měl by vrátit vyplněnou hodnotu question (pro další zpracování) ale tu vrací null. Už do toho čumím dlouho, kde prosím dělám chybu?
- David Matějka
- Moderator | 6445
Proměnou questions naplnujes až v render metodě. To je sice při vykreslování ok, ale nikoliv už při zpracování, jelikož i v okamžiku zpracování musí být formulář vytvořen identicky – tedy se stejnými fieldy a v případě select, radiolistu atd. i se stejnými options.
Ale bohužel ti do toho trochu háže vydle to, že si id ankety předáváš
ze šablony (osobně doporučuji nikdy nepredavat parametry ze šablony do
komponenty.
Pokud máš tu anketu na stránce jen jednu a už v presenteru znáš její id,
tak jej predej přímo v createComponent do komponenty. Pokud jich vykreslujes
víc (třeba přes foreach), tak použij multiplier