Problém ve formulái – signal receiver component ‚addItemsForm‘ is not found
- JPalounek
- Člen | 19
Zdravím, mám problém, v presenteru mám fce
public function actionAddItems() {
public function renderAddItems() {
public function createComponentAddItemsForm($name) {
public function addItemsFormSubmitted(Form $form) {
no a onSubmit je
$form->onSubmit[] = callback($this, ‚addItemsFormSubmitted‘);
A laděnka mi hlásí, The signal receiver component ‚addItemsForm‘ is not found.
- Mikulas Dite
- Člen | 756
Chyba není v tom útržku kódu. Chápu to tak, že po submitu formuláře naskočí tahle chyba ⇒ komponenta není nalezena ⇒ špatně používáš továrnu. Hoď sem celý presenter a opravíme to.
2. formátuj prosím příspěvky.
- JPalounek
- Člen | 19
Stačí metody createComponentAddItemsForm a public function addItemsFormSubmitted?
Ten presenter je celkem velký a nevím jestli by se klientovi líbilo, že tady „publikuji“ kód celého presenteru.
protected function createComponentAddItemsForm($name) {
$forms = $this->itemQuantity;
$form = new Form;
for($i = 0; $i < $forms; $i++) {
$itemNumber = $i + 1;
$form->addGroup('Položka č.' . $itemNumber);
$form->addText('name_item' . $i, 'Položka :');
$form->addSpinbox('quantity_item' . $i, 'Počet :');
$form->addSpinbox('prize_item' . $i, 'Cena bez DPH :');
}
$form->addSubmit('new', 'Přidat položky k faktuře');
$form->onSubmit[] = callback($this, 'addItemsFormSubmitted');
return $form;
}
public function addItemsFormSubmitted(Form $form) {
$datas = $form->getValues();
for($i = 0; $i < $this->itemQuantity; $i++) {
// Clear after last iteration
if(isset($collection)) {
unset($collection);
}
// Prepare data for this iteration
$collection['name'] = $datas['name_item' . $i];
$collection['quantity'] = $datas['quantity_item' . $i];
$collection['prize'] = $datas['prize_item' . $i];
// @todo Implment saving of collected datas
// Prize
$prize += $collection['prize'];
}
$this->redirect('index');
}
Pokud není vidět chyba v tomhle tak sem hodím celý ten presenter.
- bojovyletoun
- Člen | 667
Místo Form zkus AppForm
Taky nědělej guláš s 'quantity_item' . $i
→ použij $form->addContainer($i)
- JPalounek
- Člen | 19
bojovyletoun napsal(a):
Místo Form zkus AppForm
Taky nědělej guláš s
'quantity_item' . $i
→ použij $form->addContainer($i)
Rada s AppForm nezabrala, to s addContainer místo lepení strringů implementuji, ale to problémm nevyřeší (?)
- bojovyletoun
- Člen | 667
Tahle hláška znamená prostě, že komponentu (ten formulá nelze najít nebo není připojen k presenteru. – tak to nějak zkontroluj) . Ta rada s AppForm je důležitá – jinak formulář nebude fungovat jak by měl – nedojde k callbackům.
PS: napadlo mě zkus vytvořit formulář v startup
($this['aditemform
]=new AppForm($this);) a né pomocí
továrničky.
- JakubJarabica
- Gold Partner | 184
V továrničke by mohlo byť pripojenie formu k presenteru:
<?php
protected function createComponentAddItemsForm($name) {
...
$form = new AppForm($this, 'addItemsForm');
...
?>
Toto nepomôže?
- JPalounek
- Člen | 19
Tak jsem zakomentoval
createComponentAddItemsForm($name)
a ve presenteru vytvořil metodu startup
protected function startup() {
parent::startup();
$this['addItemsForm'] = new AppForm($this, 'addItemsForm');
$billing = $this->getLastBilling();
$forms = $this->itemQuantity;
for($i = 0; $i < $forms; $i++) {
$itemNumber = $i + 1;
$this['addItemsForm']->addGroup('Položka č.' . $itemNumber);
$this['addItemsForm']->addText('name_item' . $i, 'Položka :');
$this['addItemsForm']->addSpinbox('quantity_item' . $i, 'Počet :');
$this['addItemsForm']->addSpinbox('prize_item' . $i, 'Cena bez DPH :');
}
$this['addItemsForm']->addSubmit('new', 'Přidat položky k faktuře');
$this['addItemsForm']->onSubmit[] = callback($this, 'addItemsFormSubmitted');
}
No, a když to teď spustím, dostanu kuriózní laděnku Component with name
‚addItemsForm‘ already exists.
Vím, že teď budu vypadat jako úplná lama, ale já tu metodu
createComponentAddItemsForm($name) zkutečně zakomentoval…
Ideas?
- bojovyletoun
- Člen | 667
FATAL ERROR! má být
$this['addItemsForm'] = new AppForm;
– a to jsem ještě
přemýšlel, jestli se komponenta připojí opravdu správně.