Jaka je return hodnota po ->update()
- chemix
- Nette Core | 1310
Ahoj
narazil jsem na divne chovani, ono to mozna divne chovani neni, tak se radji ptam.
mam jednoduchy update
public function get($id)
{
return $this->database->table('users')->get($id);
}
...
// po odeslani formulare udelej...
$data = array();
$data['name'] = $v->name;
$status = $this->get($userId)->update($data);
pokud ve formulari nastavim jine jmeno nez je ulozeno v databazi vraci $status TRUE, ale pokud je jmeno stejne jako je v databazi (tj.: uzivatel kliknul jen na save, ale nic nezmenil) tak vysledek je FALSE.
je to tak spravne? Pro me to je celkem neocekavane chovani, ikdyz chapu ze technicky zadny radek nebyl zmenen. Ale jak tedy mam zjistit ze to probehlo bez chyby? ze nevyskocila zadna vyjimka?
H.
- David Matějka
- Moderator | 6445
ze nevyskocila zadna vyjimka?
presne tak, pri chybe vyskoci PDOException
- David Grudl
- Nette Core | 8228
Testovat návratovou hodnotu nemá smysl u žádné funkce z NDB, jestli se nepletu.
- chemix
- Nette Core | 1310
A pokud si PDOException neodchytnu hodi to 500 a vsichni vidi ze je chyba. Takze ja se k tomu muzu chovat jako ze se to provede vzdy…?
public function edit($userId, $change)
{
$data = array();
if (isset($change['name'])) {
$data['name'] = $change['name'];
}
$avatar = NULL;
if ($this->useFiles && isset($change['avatar'])) {
$avatar = $change['avatar'];
if ($avatar->isOk()) {
$data['avatar'] = $this->saveImage($avatar);
}
}
$this->get($userId)->update($data);
return $this->get($userId);
}
nebo je lepsi toto?
public function edit($userId, $change)
{
$data = array();
if (isset($change['name'])) {
$data['name'] = $change['name'];
}
$avatar = NULL;
if ($this->useFiles && isset($change['avatar'])) {
$avatar = $change['avatar'];
if ($avatar->isOk()) {
$data['avatar'] = $this->saveImage($avatar);
}
}
try {
$this->get($userId)->update($data);
$status = TRUE;
} catch (\PDOExcaption){
$status = FALSE;
}
if ($status){
return $this->get($userId);
} else {
return FALSE;
}
}
// + o uroven vyse v presenteru
...
$status = $this->userManager->edit(
$this->user->id,
array(
'name' => $values->name,
'avatar' => $values->avatar)
);
if ($status){
// do other stuff
$this->flashMessage('Ok');
} else {
// problem...
$this->flashMessage('Upsss', 'error');
}
- David Matějka
- Moderator | 6445
@chemix pokud chces tu chybu chytat, tak ji zaloguj. jinak budes vedet prd, ze se stala…
ale ja takovyhle vyjimky, u kterych neni predpoklad, ze se za normalnich okolnosti vyvolaji, vubec nechytam. proste je necham spadnout do error presenteru.