Porovnání zadané hodnoty s db
- .:M@rt!n:.
- Člen | 201
Ahoj,
před odesláním formuláře bych potřeboval porovnat jeden textfiel, kam se
zadává číslo poptávky, se sloupcem z db, zda tam zadané číslo už
není. V případě že tam je, vypsat hlášku že musí uživatel zadat jiné
číslo poptávky.
Šel by na to použít nějak addRule?
Díky
- Ot@s
- Backer | 476
Psáno z hlavy
$db = $this->context->database; // správně má být na třídu z modelu
$form->addText('c_poptavky', 'Číslo poptávky')
->addRule($form::INTEGER)
->addRule(function (Nette\Forms\IFormControl $control) use ($db) {
return ($db->table('poptavky')->where('c_poptavky=?', $control->getValue())->count() == 0); // správně má být na metodu z $db
}, 'Duplicitní číslo poptávky');
- .:M@rt!n:.
- Člen | 201
Upravil jsem si to trochu a skončilo to hláškou:
Argument 1 passed to AdminModule\{closure}() must be an instance of AdminModule\Nette\Forms\IFormControl, instance of Nette\Forms\Controls\TextInput given
na řádku
->addRule(function (Nette\Forms\IFormControl $control) use ($db) {
- Ot@s
- Backer | 476
.:M@rt!n:. napsal(a):
Upravil jsem si to trochu a skončilo to hláškou:Argument 1 passed to AdminModule\{closure}() must be an instance of AdminModule\Nette\Forms\IFormControl, instance of Nette\Forms\Controls\TextInput given
Asi nejjednodušší řešení
->addRule(function ($control) use ($db) {...})
. V případech
vlastního namespace použij use
nebo
\Nette\Forms\IFormControl
(ono lomítko na začátku).
- .:M@rt!n:.
- Člen | 201
Jo už to funguje, ale je s tím problém při editaci dané poptávky. I když nemám dané to číslo poptávky že se má editovat tak po odeslání formuláře mě to dál nepustí. Dalo by se to nějak ošetřit, nic mě nenapadá?
- Ot@s
- Backer | 476
.:M@rt!n:. napsal(a):
Jo už to funguje, ale je s tím problém při editaci dané poptávky. I když nemám dané to číslo poptávky že se má editovat tak po odeslání formuláře mě to dál nepustí. Dalo by se to nějak ošetřit, nic mě nenapadá?
$form->addText('c_poptavky', 'Číslo poptávky')
->addCondition($form::FILLED)
// .... zbytek