Ako nastaviť setRequired pre create a odstrániť pre update
- Čamo
- Člen | 798
Zdravím,
vie mi niekto povedať, ako dosiahnem aby bol nejaký input vo formulári
required pri akcii create ale pri update by už required nebol? Skúšal som to
cca. takto:
public function create( $id = false )
{
$form = new Form;
$form->addPassword('password');
if( ! $id ) // create
{
$form['password']->setRequired('Vylnte prosim heslo');
}
Ale toto proste neprejde. Pri update a validácii na servri mi to vždy
vyhodí required error. Pri create to správne vždy required požaduje.
Skúšal som to aj cez hidden id
$form->addPassword('password')
->addConditionOn($form['id'], $form::EQUALS, 0)
->setRequired('Heslo je povinne');
ale ani toto nefunguje. Update stále požaduje pole password. Vie niekto ako to obídem?
Ďakujem.
Editoval Čamo (26. 7. 2016 22:49)
- GEpic
- Člen | 566
Já to dělám na ‚rychlých‘ projektech tak, že mám metody
renderCreate
a renderEdit
, poté stačí toto:
// uvnitř tvorby formuláře
$password = $form->addPassword('password');
if ($this->getAction() == 'create') {
$password->setRequired('Heslo je povinné pole');
}
A nebo občas mám jen (pokud chceš na tvorbu / úpravu) jednu metodu i formulář:
public function renderEdit($id = null)
{
if ($id !== null && $zaznam = $this->trebaClanky()->get($id) {
// ok zaznam existuje, naplnime formular hodnotami (napr.)
} else {
// novy zaznam, necham formular prazdny
}
}
public function createComponentClanekForm($name)
{
$form = new Form;
// Tvuj awesome magic code
$pass = $form->addPassword('pass');
if ($this->getParameter('id') === null) {
$pass->setRequired('Heslo je povinne');
}
// Tvuj awesome magic code
return $form;
}
Editoval GEpic (26. 7. 2016 23:05)
- Altimit
- Člen | 82
Ahoj,
Pro info koukni se zde: https://doc.nette.org/cs/forms
jinak tady je možnost jiná:
public function createComponentNecoForm(){
$form = new Form();
$form->addText('name', 'Jméno:')
->setRequired('Zadejte prosím jméno');
return $form;
}
a v style.css si pak hodíš toto:
.required label { color: maroon; }
nevím co ti má dělat toto: ` if( ! $id ) // create`
pokud to má ověřovat existenci zápisu z db tak to udělej tako, kdyby jsi
hledal id v db
$post = $this->database->table('blog')->get($id);
if (!$post) {
$this->flashMessage('Error: Článek neexistuje!', 'danger');
} else {...}
- GEpic
- Člen | 566
Čamo napsal(a):
GEpic
Nie som si istý či rozumiem. Aký je rozdiel medzi tvojímif ($this->getParameter('id') === null) { $pass->setRequired('Heslo je povinne'); }
a mojím
if ( $id ) { $form['password']->('Heslo je povinne'); }
To že to své běžně používám a funguje mi to? :D
Zkontroluj si radši pořádně, co si předáváš do té továrničky do
parametru ID
.
Editoval GEpic (27. 7. 2016 10:16)
- Čamo
- Člen | 798
Do tej továrne predávam id takto:
public function createComponentCreateEditEmployeeForm()
{
return $this->employeeFormFactory->create( $this->id ); // id nastaví presenter renderUpdate
}
Asi bude chyba v tom, že to nastavuje render a nie action.
Editoval Čamo (27. 7. 2016 12:04)
- GEpic
- Člen | 566
Čamo napsal(a):
Do tej továrne predávam id takto:
public function createComponentCreateEditEmployeeForm() { return $this->employeeFormFactory->create( $this->id ); // id nastaví presenter renderUpdate }
Asi bude chyba v tom, že to nastavuje render a nie action.
To určitě ano, render se vykonává v životním cyklu až později (po tvorbě formulářů).
Takže solved? :)
Popř. odkud bere renderUpdate to ID? pokud z requestu, pak ti pomůže moje řešení, takto:
return $this->employeeFormFactory->create( $this->getParameter('id') );
Editoval GEpic (28. 7. 2016 1:07)