Formulare: zmena klicu pro getDefault() a onSubmit()

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

Ahoj vsem,

pres model si vytahnu data z DB. Mohl bych je v presenteru vlozit pres

$form = $this->getComponent('uzivatelEditForm');
$form->setDefaults((array) $row);

ale protoze nechci, aby ve formulari byly videt nazvy sloupcu z DB, tak potrebuji klice vkladaneho pole upravit. To neni problem, mam prevodni pole

// prevodni tabulka, tj. parametry z DB tabulky na polozky ve formulari
$sql2form["uzivatelske_jmeno"] = "uname";
$sql2form["uzivatelske_heslo"] = "upass";
...

pres jeden foreach $row prozenu a je to ve formulari. Uplne stejne to pak udelam pri vracenych datech z formulare po onSubmit().

Dotazy:

1.) verim, ze to jde udelat nejak elagantneji … ale nevim jak?

2.) chtel bych mit konverzni tabulku jen jednu a pouzit i treba i vicekrat, tj. na vice mistech kodu → kam a jak nejvhodnej ji dat?
(kdyby to nebyl formular pres komponentu, tak si na to udelam HELPER, ale takto nevim)

ras
Člen | 135
+
0
-

Po trech dnech bez odpvedi dochazim k zaveru, ze bud je to uplne pitomy dotaz (skoda, ze mi to nekdo nenapsal) a nebo je moje reseni to „spravne“ (a opet skoda, ze mi to nikdo nenapsal ;o).

Nakonec jsem konverzni pole umistil primo do modelu misto puvodniho umisteni v presenteru a provedl jej v obecnem duchu.

tj. AdminModel.php

function konverzeDbTable2Form($tableName)
{
  // prevodni tabulka, tj. parametry z DB tabulky na polozky ve formulari --> "DB" => "FORM"

  switch ($tableName)
  {
    CASE "tabulkaUzivatele":
      $sql2form["uzivatelske_jmeno"] = "uname";
      $sql2form["uzivatelske_heslo"] = "upass";
      $sql2form["aktivni"] = "is_active";
      break;
  }
  return $sql2form;
}

function konverzeDbColumn2Form ($tableName, $key)
{
  $x = $this->konverzeDbTable2Form($tableName);
  return isset($x[$key]) ? $x[$key] : $key;
}

function konverzeForm2DbColumn ($tableName, $key)
{
  $x = array_flip($this->konverzeDbTable2Form($tableName));
  return isset($x[$key]) ? $x[$key] : $key;
}

a tak je mozne toto aplikovat v jakemkoliv presenteru, coz v puvodnim navrhu ne.

Neda mi to se nezeptat … takze … napada nekoho z vas neco elegantnejsiho?

22
Člen | 1478
+
0
-

on asi spíš nikdo nepochopil, k čemu je ta konverze dobrá a proč by ve formuláři neměly být vidět názvy sloupců z DB?

ras
Člen | 135
+
0
-

No, ja nejak nemam rad, kdyz je videt dovnitrnosti a DB je pro me vnitrnost aplikace. Proto

studna
Člen | 181
+
0
-

ras napsal(a):
Neda mi to se nezeptat … takze … napada nekoho z vas neco elegantnejsiho?

$row = new XRows( $table );

return (string) $row['name'];    		// vrati jmeno sloupce 'name'
return $row['name']->crypt;      		// vrati zasifrovane jmeno sloupce
return $row->encrypt( $row['name']->crypt ); 	// vrati objekt XRow

Jen jsem trošku nastínil to elegantnější řešení. A jaký to má vlastně smysl?

ras
Člen | 135
+
0
-

Diky za inspiraci.

Proc? .. to jsem jiz psal, proste me vadi, aby bylo z formulare mozne vycist nazvy sloupcu v DB tabulkach. Nerikam, ze je to obecne nebezpecne, ale me to proste vadi. Beru, ze je to zbytecne ulehcovani situace cloveku, ktery chce skodit. Me to v kodu nijak neomezi (pravda cryptovane nazvy se programatorovi hure ladi, ale to je jen otazka svazani cryptovani/necryptovani s DEBUG::DETECT) a pripadnemu skodici to rozhodne neulehci.

Ale mozna je to jen moje hloupost a neznalost … ci jinak receno paranoia.

studna
Člen | 181
+
0
-

Je snad jedno jestli znám název sloupce nebo jeho crypt, ne? Crypt si tak či tak na serveru přeložíš.

22
Člen | 1478
+
0
-

podle mě to nemá žádný praktický význam akorát samá negativa.

ras
Člen | 135
+
0
-

Kazdopadne diky obema.