Veľmi zvláštna chyba pretypovania

Gavrilo
Člen | 46
+
0
-

Ahojte,

pracujem na jednom projekte a naskytla sa mi chyba s ktorou som sa ešte nikdy nestretol a nepríde mi v celku normálna.

Funkciou si klasicky naplním latte súbor.

public function renderDetail($id)
    {
        ...
        $this->template->img = $this->documentImgManager->getAll()->where(array('document_id' => $id));
		...
    }
<tr n:foreach="$img as $i">
<td><a href="http://xxxx.sk/www/upload/img/{$i->name}" target="_blank">{$i->name}</a></td>
<td><a n:href="Document:DeleteImg, $i->id">aaa</a></td>
</tr>

a teraz sa dostanem k tomu zvláštnemu. Po predaní id do tejto funkcie ju nejakym spôsobom pretypuje na string … Teda vráti mi číslo ale v stringu a tým pádom mi stým model odmietne pracovať. V DB je to ako integer takže nerozumiem kde k tomu pretypovaniu mohlo dôjsť …

public function actionDeleteImg($id){
       var_dump($id);
       die();
       $this->documentImgManager->delete($id);
       $this->flashMessage('Obrázok bol vymazaní', self::SUCCESS);
       $this->redirect('this');
   }
ali
Člen | 342
+
0
-

Zkus tohle to:

public function actionDeleteImg(int $id)
...
CZechBoY
Člen | 3608
+
+1
-

příp. já používám validační funkci a potom to přetypuju (mám Nette 2.3 a ještě php 5.4 tak proto).

if (!\Nette\Utils\Validators::isNumericInt($id)) {
	throw new \Nette\Application\BadRequestException('neni integer');
}
$id = (int)$id;
...
David Grudl
Nette Core | 8133
+
0
-

CZechBoY napsal(a):

příp. já používám validační funkci a potom to přetypuju (mám Nette 2.3 a ještě php 5.4 tak proto).

Tam lze použít výchozí hodnotu:

public function actionDeleteImg($id = 0)
CZechBoY
Člen | 3608
+
0
-

@DavidGrudl a potom Nette validuje jestli je hodnota parametru integer? Funguje to takhle i pro string, float atd?

David Grudl
Nette Core | 8133
+
0
-

Jj.

Gavrilo
Člen | 46
+
0
-

ali napsal(a):

Zkus tohle to:

public function actionDeleteImg(int $id)
...

toto funguje na php 7 ja bežím tuším na 5.6.0

Gavrilo
Člen | 46
+
0
-

CZechBoY napsal(a):

příp. já používám validační funkci a potom to přetypuju (mám Nette 2.3 a ještě php 5.4 tak proto).

if (!\Nette\Utils\Validators::isNumericInt($id)) {
	throw new \Nette\Application\BadRequestException('neni integer');
}
$id = (int)$id;
...

Toto mi tiež nepomôže síce to vypíše ako integer po dumpe ale funkcia to tak neberie a hodí mi chybu .
Call to a member function delete() on boolean

CZechBoY
Člen | 3608
+
0
-

To bude chyba jeste nekde dal. Nejspis ti chybi pozadovany radek v db.