Předávání ID záznamu

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

Zdravim,

doufam, ze nebudu otravovat s necim co se tu uz 100× resilo (opravdu jsem hledal :D).

Jak resite predavani ID editovaneho zaznamu?

<?php
function renderUserForm($USER_ID)
{
	if ($USER_ID) {
		$users = new Users();

		$this['userForm']->setDefaults($users->load($USER_ID));
	}
}

function createComponentUserForm()
{
	$form = new AppForm;

	$form->addHidden('USER_ID');

	$form->addText('LOGIN', 'Login')
		->addRule(Form::FILLED, 'Vyplňte login!');

	$form->addText('EMAIL', 'Email')
		->addRule(Form::FILLED, 'Vyplňte email!')
		->addRule(Form::EMAIL, 'Nevalidní email!');

	$form->addPassword...
	.......
}
?>

Takto i vim pri ukladani jestli zaznam edituji, nebo pridavam novy. Problem je, ze ted potrebuji vyresit validaci vyplneni hesla, ale pouze pokud se jedna o vytvareni noveho uzivatele.

<?php
$form->addPassword('PASSWORD', 'Nové heslo')
	->addConditionOn($form['USER_ID'], Form::NUMERIC, FALSE)
	->addRule(Form::FILLED, 'Vyplňte heslo!');
?>

Toto skonci s Call to undefined static method HiddenField::validateinteger().

Diky moc za rady :]

Bernard Williams
Člen | 207
+
0
-

Nazdárek,

já to řeším takto:

Presenter:

public function renderNovinka($id = NULL) {
	if (isset($id))
    	// edituji
	else
		// vkladam novou novinku
}

V komponentě na formulář to nijak neřeším – ten si $id předává sám a automaticky.

U zpracování novinky to mám takto:

public function novinkaFormSubmitted(AppForm $form) {
    if ($form['pridat']->isSubmittedBy()) {
        $id = (int)$this->getParam('id');
        // editace
        if (isset($id)) {
            ...
        }
        else { // insert
            ...
        }
    }
}
reflex
Člen | 28
+
0
-

Super! To jsem presne potreboval, diky moc

reflex
Člen | 28
+
0
-

Jenom jeste opravim malou chybku

$id = (int)$this->getParam(‚id‘); // pretypuje NULL na 0

tim padem if (isset($id)) === TRUE

takze by bylo lepsi if (empty($id))

Jenom pokud by to nekdo resil a nahodou mu to neslo

PetrP
Člen | 587
+
0
-

Bernard Williams napsal(a):

public function novinkaFormSubmitted(AppForm $form) {
    if ($form['pridat']->isSubmittedBy()) {
        $id = (int)$this->getParam('id');
        // editace
        if (isset($id)) {
            ...
        }
        else { // insert
            ...
        }
    }
}

Pozor kdyz není vyplněné id a ty ho přetipuješ na int (int) NULL === 0; Tak je vždy isset(0) === true

(Teď koukám že to už píše reflex, ale myslím že je lepší to tady nepřetypovávat než použít empty).

Dále nerozumím proč je potřeba kontrolovat který button byl mácknutej. Když už tak si nastavím na button přímo nějakou akci:

$form['pridej']->onClick[] = callback('novinkaFormPridat');