Porovnání zadané hodnoty s db

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

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

Majkl578
Moderator | 1364
+
0
-

Šel, 1. parametr closure, 2. chybová hláška. Ale určitě bys měl mít i ošetření na úrovni databáze – unikátní klíč.

.:M@rt!n:.
Člen | 201
+
0
-

Moc nechápu jak udělat tu první část addRule…

Ot@s
Backer | 476
+
0
-

Viz. validace formulářů, část vlastní validátory.

.:M@rt!n:.
Člen | 201
+
0
-

Abych pravdu řekl, tak z nejsem moc chytrý :)

Ot@s
Backer | 476
+
0
-

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
+
0
-

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
+
0
-

.: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
+
0
-

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
+
0
-

.: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
.:M@rt!n:.
Člen | 201
+
0
-

Vřele díky za rady ;)