form – metoda na odobratie prvku

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
bazo
Člen | 620
+
0
-

Do Forms by sa hodila moznost odobrat konkretny prvok. Priklad:

Form na pridanie noveho zamestnanca obsahuje policko ‚password‘.

Form na editaciu dedi od formu na pridanie. Nechcem, aby sa dalo menit heslo. Pouzitie unset($form[‚password‘]); zahlasi Component ‚password‘ is not attached to ‚Form‘.

Jedina moznost je prvku nastavit disabled a rendered, co je dost neprakticke.

jansfabik
Člen | 193
+
0
-

unset($form['password']); funguje, nepokoušíš se ho odstranit ještě před inicializací?

bazo
Člen | 620
+
0
-

aha, problem je v tom, ze ten prvok patri do skupiny. vtedy nejde odobrat. ak ho dam mimo skupiny tak ide. takze bud je to bug alebo to treba robit nejak inak

jansfabik
Člen | 193
+
0
-

zajímavé, mě to funguje i když ten prvek dám do skupiny, mohl bys sem dát celý kód?

bazo
Člen | 620
+
0
-
<?php
class FormNew extends BaseForm
{
    public function __construct(IComponentContainer $parent = null, $name = null)
    {
        parent::__construct($parent, $name);
        $this->addGroup('Group');
            $this->AddText('policko');
    }
}
class FormEdit extends FormNew
{
    public function __construct(IComponentContainer $parent = null, $name = null)
    {
        parent::__construct($parent, $name);
        unset($this['policko]); // hodi error
    }
}
?>
Ondřej Mirtes
Člen | 1536
+
0
-

Dokonce parse error :o)

Oggy
Člen | 306
+
0
-

bazo napsal(a):

aha, problem je v tom, ze ten prvok patri do skupiny. vtedy nejde odobrat. ak ho dam mimo skupiny tak ide. takze bud je to bug alebo to treba robit nejak inak

co použít metodu removeComponent?

<?php
$form = $this->getComponent('editForm');
$form->removeComponent($form['password']);
?>

pokud to je group

<?php
$group = $form->getComponent('groupName');
$group->removeComponent($group);
?>

nebo mě napadá

<?php
$form->removeComponent($form['groupName']['password']);
?>

ale střílím tak od boku..nechce se mi to testovat..ale třeba to takto půjde

Editoval Oggy (21. 6. 2010 20:21)

bazo
Člen | 620
+
0
-

Ondřej Mirtes napsal(a):

Dokonce parse error :o)

na vtipky by ta bolo…

bazo
Člen | 620
+
0
-

Oggy napsal(a):

bazo napsal(a):

aha, problem je v tom, ze ten prvok patri do skupiny. vtedy nejde odobrat. ak ho dam mimo skupiny tak ide. takze bud je to bug alebo to treba robit nejak inak

co použít metodu removeComponent?

<?php
$form = $this->getComponent('editForm');
$form->removeComponent($form['password']);
?>

pokud to je group

<?php
$group = $form->getComponent('groupName');
$group->removeComponent($group);
?>

nebo mě napadá

<?php
$form->removeComponent($form['groupName']['password']);
?>

ale střílím tak od boku..nechce se mi to testovat..ale třeba to takto půjde

nic z toho nefunguje. ani taketo nieco:

<?php
$this->removeComponent($this->getComponent('policko'));
?>

stale error Component ‚policko‘ is not attached to ‚Form‘.

Oggy
Člen | 306
+
0
-

stale error Component ‚policko‘ is not attached to ‚Form‘.

no tahle chyba se objevuje pokud v továrničce (createComponent) form zapomeneš vrátit..
ale ty to řeší vlastní třídou pro každou komponentu ..proč vlastně?

když můžeš udělat toto:

<?php
public function createComponentForm() {

        $form = new AppForm;
	...
	return $form;
}

public function createComponentEditForm() {
	....
	$form = $this->createComponentForm();
	....
	$form->removeComponent($form['sendNext']);

        $form->onSubmit = array();
        $form->onSubmit[] = array($this, 'editFormSubmit');

        return $form;
    }
?>

ale v tvém případě takhle bez kódu nevím..

jinak

<?php
$this->addGroup('Group');
            $this->AddText('policko');
?>

nepřídá políčko skupiny Group ..přidáváš políčko do $this ..