Jak řešíte editování údajů?

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

Zdravím,

jak řešíte následující věc?

Mám formulář pro přidávání. Při odeslání se vloží údaje do db.

Jak to řešíte s editování? Nový formulář, nebo to nasadíte do toho pro přidávání se setDefaultsValues?

kravčo
Člen | 721
+
0
-

Ja väčšinou tak, že mám jeden formulár a vkladanie a úpravy majú rozdielne setDefaultValues() a onSuccess handler.

wise
Člen | 161
+
0
-

onSuccess? Můžeš ukázat jak to myslíš? Já když už tam, isSubmittedBy, kde vlastně pokud je insert, vykreslím submit A, pokud edit, B

VaKvas
Začátečník | 111
+
0
-

napriklad takto :

$form->onSuccess[] = callback($this, 'formSubmitted'); // odeslani formu
	if ($this->action === 'edit') {
	    $data_z_db= $this->model->getData($this->getParam('id')); // podle ID napriklad
	    if (!$data) {
		throw new Nette\Application\BadRequestException;
	    }
	    $form->setDefaults($data->toArray());
	}
kravčo
Člen | 721
+
0
-

Ja teda presnejšie používam onClick, ale rozdiel je minimálny:

// továrnička v prezenteri
function createComponentForm($name)
{
    // pokial vytvaram, param id je NULL
    $this->getModel()->getForm($this->getParam('id'));
}

// továrnička v modeli
function getForm($id)
{
    $form = new Nette\Application\UI\Form;
    $form->addText('text', 'Text článku');
    $form->addSubmit('save', 'Uložiť');

    if ($id) {
        // editing
        $data = $this->getData($id);
        $form->setDefaultValues($data);
        $form['save']->onClick[] = function() { /* update data */ };
    } else {
        // creating
        $form['save']->onClick[] = function() { /* insert data */ };
    }

    return $form;
}
22
Člen | 1478
+
0
-

já teda úplně jinak:

protected function createComponentForm($name)
{
    $form = new Nette\Application\UI\Form($this, $name);
    $form->addText('text', 'Text článku');
    $form->addSubmit('save', 'Uložiť')
	->onClick[] = callback($this, 'ok');

    return $form;
}

public function ok(SubmitButton $form)
{
	if($this->action === 'default'){
	...save atd..
}

public function actionDefault()
{

}

public function actionEdit($id)
{
	$data = $this->getModel()->getForm($id);
	$this['form']->setDefaults($data);
}