addDynamic editace záznamů

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

Zdravím,

aktuální řeším problém s doplňkem addDynamic, a to konkrétně přidávání a mazání řádků během editace.

Nejdříve jsem se podle dokumentace pokusil vyřešit mazání jednotlivých řádků tak, aby při stisknutí tlačítka smazat, smazal řádek z databáze.

$container->addSubmit('remove', 'Smazat')
    ->addRemoveOnClick(callback($this, 'deleteProduct'));
}, 1);
public function deleteProduct(Kdyby\Replicator\Container $replicator, Container $product){
    $id = $product->id;
    $this->repository->getProductTable()->where('id', $id)->delete();
}

Bohužel mi nette vyhodí chybu

Undefined variable: this

a bohužel jsem nepřišel na funkční variantu.

Dále bych chtěl poprosit o radu, jak udělat to když chci při editaci přidat nový řádek a zároveň ho uložit do databáze.

Zde mám část, která aktualizuje řádky, které se načtou z databáze, bohužel jak jsem psal nevím jak udělat to, aby se v případě přidání nového řádku vytvořil nový záznam v databázi.

foreach($editform['editproducts']->values as $productId => $product){
    $update = $this->repository->getProductTable()->get($productId);
    $update->update(array(
        'name' => $product['name'],
        'type' => $product['type'],
        'price' => $product['price'],
    ));
}

Díky všem za pomoc.

llook
Člen | 407
+
0
-

Undefined variable: this

Hádám, že uvnitř anonymní funkce a v PHP 5.3, protože tam není k dispozici $this ze scopy definující metody a ani se nedá přímo přidat přes use. Obchází se to nějak takhle:

$that = $this;
$form->addDynamic('users', function (Container $user) use ($that) {
	// A tady pak místo $this použiješ $that.
}

Jinak já addDynamic obvykle používám tak, že data v databázi upraví až po odeslání formuláře (onSuccess).

quiced
Člen | 85
+
0
-

llook napsal(a):

Undefined variable: this

Hádám, že uvnitř anonymní funkce a v PHP 5.3, protože tam není k dispozici $this ze scopy definující metody a ani se nedá přímo přidat přes use. Obchází se to nějak takhle:

$that = $this;
$form->addDynamic('users', function (Container $user) use ($that) {
	// A tady pak místo $this použiješ $that.
}

Jinak já addDynamic obvykle používám tak, že data v databázi upraví až po odeslání formuláře (onSuccess).

Myslíš, že by jsi mi mohl napsat, tvoje řešení tohoto problému ? Díky