Update entity (Doctrine) pomocí ajaxu na onchange

Alis
Člen | 7
+
0
-

Ahoj, přijde mi, že chci udělat úplně jednoduchou věc, ale stále nevím jak na to. Začala jsem používat Doctrine 2 na práci s Entitami. Snažím se vypsat tabulku, ve které jdou položku editovat kliknutím na ně. Potřebovala bych si nějak předávat pomocí ajaxu objekt entity, který upravuji + další parametry (např. o jaký se jedná sloupec).

řádek tabulky:

<td><input n:if="isset( $value['input']) && $value['input']" onchange="saveItem(this.value,{$value[ 'entity' ]}, this); return false;" name={$value['name']} type={$value['type']} value={$value['value']} >

{* v $value['entity'] mam entitu (objekt) Rozvrh *}
<script>
function saveItem(value, objektRozvrh, element) {
        var name = $(element).attr("name");
        var data = {};
        data['name'] = name;
        data['value'] = value;
        data['objekt'] = objekt; // potrebuji si ten objekt nekam ulozit

        $.nette.ajax({
            type: 'GET',
            url: {link zmenitPromennou!},
            data: data,..
}});
</script>

pak v presenteru potřebuji umět nějak ty data zpracovat

<?php
public function handleZmenitPromennou( $data) {
	// tady bych uz chtela ten objekt mit
	Rozvrh $rozvrh = $data['objekt'];
	$rozvrh->$data['name'] = $data['value']; // tady bych chtela updatnou dany sloupec, ktery mi prisel v parametrech
	$this->em->flush(); // potvrdit zmeny

...
}
?>

Potřebuji nějak dostat ten objekt abych ho pak mohla updatnout, jak jde vidět z ukázky. Možná na to jdu úplně špatně.

Prosím o každou radu!

MajklNajt
Člen | 470
+
0
-

potrebuješ prenášať celý objekt? prečo si do formuláru nedáš iba ID tej entity a v handle si ho potom podľa tohto ID nevytiahneš z entity managera?

Alis
Člen | 7
+
0
-

To bych mohla taky udělat, jen jsem v té tabulce chtěla používat více entit, proto pak to zobecnění.

Pokud to udělám tak jak píšeš, jak pak updatnu daný sloupec předaný v parametru?

<?php
$rozvrh = $this->em->find(Rozvrhy::class, $id);
$rozvrh->$data['name'] = $data['value']; // takto mi to nefunguje
$this->em->flush(); // potvrdit zmeny
?>
Alis
Člen | 7
+
0
-

Aha, takt to jde, jen je potřeba to dát do jiné proměnné

<?php
$name = $data['name'];
$rozvrh->$name = $data['value'];
?>
MajklNajt
Člen | 470
+
0
-

Môžeš si popri ID posielať aj názov entity a ten predáš namiesto Rozvrhy::class. A čo ti na tom nefunguje? Hádže to nejakú chybu? Máš tie properties ako public? Keď si dumpnes $data['name'] máš tam názov property správne?

MajklNajt
Člen | 470
+
0
-

Alis napsal(a):

Aha, takt to jde, jen je potřeba to dát do jiné proměnné

<?php
$name = $data['name'];
$rozvrh->$name = $data['value'];
?>

aha ano.. alebo by stačilo

<?php
$rozvrh->($data['name']) = $data['value']
?>
lightteka
Backer | 17
+
0
-

MajklNajt napsal(a):

Alis napsal(a):

Aha, takt to jde, jen je potřeba to dát do jiné proměnné

<?php
$name = $data['name'];
$rozvrh->$name = $data['value'];
?>

aha ano.. alebo by stačilo

<?php
$rozvrh->($data['name']) = $data['value']
?>

Mely by tam byt „chlupaty“ zavorky, tedy $rozvrh->{$data['name']} = ...