Předávání ID záznamu
- reflex
- Člen | 28
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
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
...
}
}
}
- PetrP
- Člen | 587
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');