Nelza mazat záznamy z tabulky podle ID
- Nevinho
- Člen | 77
Zdravím, potřeboval bych udělat mazací funkci z databáze každého jednotlivého řádku, ovšem, mám problém s implementací, kde se mi to padá pořád na získání odpovídajícího ID záznamu z tabulky.
Model:
<?php
public function findBy($id)
{
return $this->findAll()->get($id);
}
?>
Presenter:
<?php
class DataPresenter extends BasePresenter
{
/** @var Financni_informaceRepository */
private $finance;
protected function startup()
{
parent::startup();
$this->finance = $this->context->financni_informaceRepository;
}
/**
* Továrnička na delate.
* @return AppForm
*/
protected function createComponentDeleteForm()
{
$form = new AppForm;
$form->addSubmit('cancel', 'Zrušit')
->onClick[] = $this->formCancelled;
$form->addSubmit('delete', 'Smazat')
->setAttribute('class', 'default')
->onClick[] = $this->deleteFormSubmitted;
$form->addProtection();
return $form;
}
public function deleteFormSubmitted()
{
$this->finance->findBy($this->getParameter('ID'))->delete();
$this->flashMessage('Záznam byl smazán.');
$this->redirect('Data:vypis');
}
/********************* financni_informace vypis *********************/
public function renderVypis() {
$strankovani = new VisualPaginator($this, 'paginator');
$paginator = $strankovani->getPaginator();
$paginator->itemsPerPage = 9;
$paginator->itemCount = $this->finance->countFinance();
$rows = $this->finance->getAll($strankovani->paginator->offset, $strankovani->paginator->itemsPerPage);
$this->template->finance = $rows;
}
/********************* financni_informace delete *********************/
public function renderSmazat($id)
{
$this->template->finance =$this->finance->findBy($this->getParameter('ID'));
if (!$this->template->finance) {
$this->error('Záznam nebyl nalezen');
}
}
public function formCancelled()
{
$this->redirect('Data:vypis');
}
}
?>
Editoval Nevinho (22. 11. 2012 13:03)
- ViPEr*CZ*
- Člen | 817
vvoody napsal(a):
Podla mňa platí, problém by som videl v tom, že je to case sensitive.
$this->getParameter('id');
No pokud to má nastavený v routě tak určitě. ;-) Ono taky volat
v metodě render, která vypadá takto:
renderSmazat($id) metodu $this->getParameter(‚ID‘) je dost
divný :-)
- Nevinho
- Člen | 77
Ne sorry do databáze se nedívá, ale pak teda nechápu, proč to nevrací to odpovídající id záznamu, když zadaám do metody render($id=1) tak to smaže v pohodě, ale vždycky jen záznam s tím idéčkem. Jak teda mám předat ten parametr aktuálního id? metoda findby($id) by přece měla být dobrá nebo ne?
- ViPEr*CZ*
- Člen | 817
Nevinho napsal(a):
Ne sorry do databáze se nedívá, ale pak teda nechápu, proč to nevrací to odpovídající id záznamu, když zadaám do metody render($id=1) tak to smaže v pohodě, ale vždycky jen záznam s tím idéčkem. Jak teda mám předat ten parametr aktuálního id? metoda findby($id) by přece měla být dobrá nebo ne?
Co si přečíst moji první odpověď??? Koukněte se na persistentní parametry.
Editoval ViPEr*CZ* (22. 11. 2012 21:25)
- ViPEr*CZ*
- Člen | 817
Nevinho napsal(a):
Tak to je funkce, která obsahuje kód, který se má provést, pokud je formulář vyplněn a je kliknuto na tlačíto zobrazit dejme tomu.. V mém případě kód, který se provede po kliknutí na odkaz smazat ve vypsané databázi.
Skoro… funkce to je… je to callback na úspěšné odeslání formu a
také to je signál komponenty formuláře. A co se stane… v url je ID a po
submitu, když smažete $this->redirect(‚Data:vypis‘);
tak to ID zmizí… protože se přesměruje na signál a IDéčko se
nepřenese. Jako persistent se ovšem přenese. Jak označit property jako
persistent je v dokumentaci.
- Nevinho
- Člen | 77
chápu, ale vždy se vyhodí hláška že záznam není nalezen.
<?php
/** @persistent */
public $id;
public function renderSmazat($id)
{
$this->template->finance =$this->finance->findBy($this->id=$this->getParameter('id'));
if (!$this->template->finance) {
$this->error('Záznam nebyl nalezen');
}
?>
Musí být někde v tété funkci chyba, ale nemůžu přijít kde.
- ViPEr*CZ*
- Člen | 817
Když už, tak takhle:
public function renderSmazat($id)
{
$this->template->finance =$this->finance->findBy($id);
if (!$this->template->finance) {
$this->error('Záznam nebyl nalezen');
}
a pak taky:
public function deleteFormSubmitted()
{
$this->finance->findBy($this->id)->delete();
$this->flashMessage('Záznam byl smazán.');
$this->redirect('Data:vypis');
}
- vvoody
- Člen | 910
Tak si dumpni to id čo v ňom máš a používaj to ktoré je predávané ako parameter funkcie, s tým getParameter sa len naradmo upíšeš k smrti.
public function renderSmazat($id)
{
dump($id);
$this->template->finance = $this->finance->findBy($id);
if (!$this->template->finance) {
$this->error('Záznam nebyl nalezen');
}
}
- Nevinho
- Člen | 77
při zmáčknutí tlačítka smazat a dump($this->id) v metode renderSmazat
URL:http://localhost/…/data/smazat
není tam žádné id, vypíše se pouze NULL
- vvoody
- Člen | 910
Myslel som to tak že ako generuješ link, ktorý odkazuje na tu stránku kde si teraz (http://localhost/…/data/smazat)
- Nevinho
- Člen | 77
<a class=„in_form“ n:href=„smazat $id“>Smazat</a> – takto předpokládám?
Ale když to udělám, tak po kliknutí tlačítka smazat je url: http://localhost/…ta/smazat/id
a hláška záznam nebyl nalezen