Chybí argument „values“ no.2 při zavolání fromSucceeded
- UnkownNick
- Člen | 11
Dobrý den,
prozkoumal jsem různe thready, a našel jsem 2 s podobnou problematikou,
nicméně ani jeden postup nevyřešil můj problém, mám formulář v nette
který pomocí Ajaxu a snippetů, měním podle návodu Dependent select box,
tedy při změně jednoho selectu ovlivní options v druhém selectu. Vše
funguje správně, upravil jsem kvůli tomu výpis formuláře na šabloně
<div class="col-md-6 col-xs-12">
<div class="panel panel-default">
<div class="panel-heading">
Přidat místnost
</div>
<div class="panel-body">
{form addOfficeForm}
{label building /} {input building}
{label officeNumber /} {input officeNumber}
{label maxCapacity /} {input maxCapacity}
{snippet secondSnippet}
{label floornumber /} {input floornumber}
{/snippet}
{label type /} {input type}
{label reservation /} {input reservation}
<br/>
{label roomManager /} {input roomManager}
<br/>
{input send}
{/form}
<script>
{include #jsCallback, input => building, link => firstChange}
</script>
</div>
</div>
</div>
a tady je komponenta včetně handleru pro ajax:
public function handleFirstChange($value)
{
if ($value) {
$building = array();
$buildings_arr = $this->buildings->getAll()->fetchAll();
foreach ($buildings_arr AS $key => $data) {
if ($value == $data['id_building']) {
$x = $data['max_floor']-1;
$z = 0;
for ($i = $data['min_floor']; $i <= $x; $i++) {
$building[$z] = $i;
$z++;
}
}
}
$this['addOfficeForm']['floornumber']->setPrompt('Vyberte podlaží')
->setItems($building);
} else {
$this['addOfficeForm']['floornumber']->setPrompt('Nejdříve vyberte jednu budovu')
->setItems(array());
}
$this->invalidateControl('secondSnippet');
}
protected function createComponentAddOfficeForm()
{
$building = array();
$buildings_arr = $this->buildings->getAll()->fetchAll();
foreach ($buildings_arr AS $key => $value) {
$building[$value['id_building']] = $value['name'] . " - " . $value['building_name'];
}
$office_types = array(1 => "Kancelář", 2 => "Zasedací místnost");
$users_arr = $this->getUser()->getUsers($this->user->identity->data['schema']);
$users = array();
foreach ($users_arr AS $key => $value) {
$users[$value['id_user']] = $value['firstname'] . " " . $value['secondname'];
}
$form = new Form;
$form->setRenderer(new Bs3FormRenderer());
$form->addSelect('building', 'Budova:', $building)
->setPrompt('Vyberte budovu')
->setRequired('Prosím vyplňte pole budova');
$form->addText('officeNumber', 'Označení místnosti:')
->addRule(Form::FILLED, 'Označení místnosti nesmí být prázdné')
->addRule(Form::MAX_LENGTH, 'Označení může obsahovat maximálně %d znaků', 4)
->setRequired('Prosím vyplňte pole označení místnosti');
$form->addText('maxCapacity', 'Maximální kapacita:')
->setType('number')
->addRule(Form::FILLED, 'Kapacita místnosti nesmí být prázdná')
->addRule(Form::MAX_LENGTH, 'Kapacita může obsahovat maximálně %d znaků', 4)
->setRequired('Prosím vyplňte pole maximální kapacita');
$form->addSelect('floornumber', 'Podlaží:')
->setPrompt('Nejdříve vyberte jednu budovu')
->setRequired('Prosím vyplňte pole podlaží');
$form->addSelect('type', 'Typ:', $office_types)
->setPrompt('Vyberte typ místnosti')
->setRequired('Prosím vyplňte pole typ místnosti');
$form->addCheckbox('reservation', 'Možnost rezervace')
->setAttribute('id', 'reservation')
->setDefaultValue(NULL);
$form->addSelect('roomManager', 'Správce místnosti/klíčů:', $users)
->setPrompt('Vyberte ze zaměstnanců');
$form->addSubmit('send', 'Přidat místnost');
$form->onSubmit[] = array($this, 'addOfficeFormSucceeded');
return $form;
}
Výsledek po odeslání na funkci onSubmit(); protože onSuccess(); nedělalo vůbec nic, je missing argument 2 „values“ in „addOfficeFormSucceeded“.
Takže se to na funkci co data formuláře dostane, nicméně to neodešla data a nenašel jsem v tom důvod proč, proto píšu dotaz, předem se omlouvám pokud je někde na fóru přesně na tohle řešení, já jsem ho nenašel.
Děkuji za odpovědi.
- UnkownNick
- Člen | 11
CZechBoY napsal(a):
Vůbec nic ⇒ nejspíš si měl error ve formuláři. Použij
onSuccess
událost pokud chceš opravdu bezchybně odeslaný formulář.
onSubmit
dostane parametr pouze formulář (protože dávat nevalidní values nemá jaksi smysl…)
Aha, tak to mě nenapadlo, dobře to přehodím během chvilky, ale v tom případě, řeším jiný problém,
public function addOfficeFormSucceeded($form, $values)
{
if ($this->acl->isAllowed('configuration', 'add')) {
$data = array(
'id_building' => $values->building,
'roomno' => $values->officeNumber,
'maxcapacity' => $values->maxCapacity,
'storey' => $values->floornumber,
'type' => $values->type,
'bookable' => $values->reservation,
'bookperson' => $values->roomManager,
'createby' => $this->user->id
);
$stmt = $this->buildings->addOffice($data);
if ($stmt) {
$this->flashMessage('Kancelář úspěšně přidána', 'success');
} else {
$this->flashMessage('Chyba u přidání kanceláře', 'danger');
}
} else {
$this->flashMessage('Přidání konfigurace není na tomto účtu povoleno', 'danger');
}
}
Na ty flash messages se to ani nedostane, ani na tu zápornou, prostě se nic nestane, myslíš tedy že to je chyba validace při zvalidování formuláře? Nemělo by to tedy skončit false a spadnout mi to do v podmínce do else?
- AdamVyborny
- Člen | 36
CZechBoY napsal(a):
Zkus si vypsat errory a uvidis sam…
V tovarnicce treba takhle:$form->onError[] = function ($form) { \Tracy\Debugger::barDump($form->getErrors()); };
Hází to „prosím vyplňte pole podlaží“, i když ho v selectu vyberu…
- Pavel Kravčík
- Člen | 1196
Ještě k tomu prvnímu bodu, mělo by stačit přidat parametr jako nepovinný a obslouží to success i submit. Docela se osvědčilo tohle:
formSuccess(UI\Form $form, ArrayHash $values = NULL)