Formulář na editaci a přidávání se nechce odeslat
- Chuchy
- Člen | 77
Ahoj,
napsal jsem si formulář na přidávání a editování telefonů, jenže se mi
nechce odeslat a nevím proč?
<?php
namespace App;
use Nette,
Nette\Application\UI;
class PhonePresenter extends BasePresenter {
private $database;
public function __construct(Nette\Database\Context $database) {
$this->database = $database;
}
protected function createComponentPhoneForm() {
$form = new UI\Form;
$form->addText('serial', 'Sériové číslo:')
->setRequired('Vyplňte 15ti místné sériové číslo')
->addRule(\Nette\Forms\Form::INTEGER, 'Zadejte pouze celé číslo')
->addRule(\Nette\Forms\Form::LENGTH, "Sériové číslo není 15ti místné", 15);
$form->addText('name', 'Název:')
->setRequired('Vyplňte název telefonu');
;
$sqlColors = "SELECT color_id, color_name FROM o2_colors ORDER BY color_name ASC";
$colorsArray = array();
foreach ($this->database->query($sqlColors) as $colors) {
$colorsArray[$colors->color_id] = $colors->color_name;
}
$form->addSelect('color', 'Barva', $colorsArray);
$sqlProducers = "SELECT producer_id, producer_name FROM o2_producers ORDER BY producer_name ASC";
$producersArray = array();
foreach ($this->database->query($sqlProducers) as $producers) {
$producersArray[$producers->producer_id] = $producers->producer_name;
}
$form->addSelect('producer', 'Výrobce', $producersArray);
return $form;
}
public function renderAddPhone() {
$form = $this->getComponent("phoneForm");
$form->addSubmit('add', 'Přidat');
$form->onSubmit[] = array($this, 'addPhoneSubmitted');
$this->template->form = $form;
}
public function renderEditPhone($sn) {
$form = $this->getComponent("phoneForm");
$sql = "SELECT * FROM o2_phones WHERE phone_sn=$sn";
$editPhone = $this->database->query($sql)->fetch();
if (!$editPhone) {
$this->error('Takový telefon není v databázi!');
}
$name = $editPhone->phone_name;
$setDefaults = array('serial' => $editPhone->phone_sn,
'name' => $editPhone->phone_name);
$form->setDefaults($setDefaults);
$form['color']->setDefaultValue($editPhone->phone_color);
$form['producer']->setDefaultValue($editPhone->phone_producer);
$form->addSubmit('edit', 'Editovat');
$form->onSuccess = $this->editPhoneSubmitted;
$this->template->name = $name;
$this->template->form = $form;
}
public function editPhoneSubmitted(UI\Form$form) {
$values = $form->getValues();
}
public function addPhoneSubmitted(UI\Form $form) {
$values = $form->getValues();
}
}
- David Matějka
- Moderator | 6445
$form->onSubmit[]
je spatne, pouziva se onSuccess$form->onSuccess
je spatne, chybi ti tam[]
- co to znamena, ze se nechce odeslat?
Editoval matej21 (14. 1. 2014 19:07)
- voda
- Člen | 561
onSuccess
formuláře musíš nastavit před zpracováním
signálů (buď v továrničce nebo action metodě). Viz Životní
cyklus presenteru
- Chuchy
- Člen | 77
Ok,
$form->onSuccess[] = $this->editPhoneSubmitted;
$form->onSuccess[] = $this->addPhoneSubmitted;
jsem opravil snad je to takhle správně.
A pokud to chci pomocí action, jak tam dostanu ty hodnoty z toho formuláře?
public function actionAddPhone(){
$this->addPhoneSubmitted();
}
Nechce fungovat, když jsem měl vyplněné addPhoneSubmitted, tak mi to neuložilo do db a ani nepřesměrovalo na jiný presenter.
Editoval Chuchy (14. 1. 2014 19:31)
- David Matějka
- Moderator | 6445
jen ten kod, co nastavuje ty callbacky, presun z render do action
Editoval matej21 (14. 1. 2014 19:30)
- Chuchy
- Člen | 77
Takhle to, ale asi nepůjde, něco mi tam chybí?
public function editPhoneSubmitted(UI\Form $form) {
$this->redirect('Phones:default');
//$values = $form->getValues();
}
public function addPhoneSubmitted(UI\Form $form) {
$this->redirect('Phones:default');
//$values = $form->getValues();
}
public function actionAddPhone() {
$form->onSuccess[] = $this->addPhoneSubmitted;
}
public function actionEditPhone() {
$form->onSuccess[] = $this->editPhoneSubmitted;
}
Editoval Chuchy (14. 1. 2014 19:41)
- Chuchy
- Člen | 77
matej21 napsal(a):
ano, chybi ti tam promenna
$form
public function addPhoneSubmitted(UI\Form $form) {
$this->redirect('Phones:default');
//$values = $form->getValues();
}
public function actionAddPhone($form) {
$form->onSuccess[] = $this->addPhoneSubmitted;
}
Pokud takhle, tak to nefunguje.
Jestli můžu poprosit, momentálně netuším, kde :D
Editoval Chuchy (14. 1. 2014 20:01)