datový typ z metody GET – must be an instance of int, string given

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
masterr
Začátečník | 141
+
0
-

Zdravím,
beru id z url. (/admin/article/edit/2/)

90:        public function actionEdit(\int $id)
91:        {
92:            $this->createComponentNewArticleForm($id);
93:            dd($id);
94:        }

vyhodí:
Argument 1 passed to AdminModule\ArticlePresenter::actionEdit() must be an instance of int, string given

A opravdu je to string podle debugu, otázka z ní jak z toho mám udělat integer? Původně jsem myselel, že to public function actionEdit(\int $id) ověří datový typ a změní na zadaný v případě že je to možné. Ale ono to zřejmě jen kontroluje. Jak tohle řešíte?

grongor
Člen | 31
+
0
-

@masterr: PHP nemá typovou kontrolu. Jako type hint tedy nelze uvádět skalární typy. To co jsi ty napsal vlastně znamená, že parametrem má být třída int. A to jsi nechtěl. Další info najdeš zde.

Jak to řešit … buď neřešit (většinou je jedno, jestli je to int nebo string) a nebo si to přetypovat $int = (int) $int;. Pokud chceš ověřit, že se opravdu jedná o inteeger, pak si musíš napsat ověřovací funkci, např.

function isInt($param)
{
    if (is_numeric($param) && intval($param) == $param)
        return TRUE;

    return FALSE;
}

a nebo můžeš pouít třídu s validátory přímo z Nette, kterou najdeš zde.

masterr
Začátečník | 141
+
0
-

já právě zkoušel

public function actionEdit((int)$id)

jenže to se nette taky nelíbilo

Editoval masterr (21. 7. 2013 10:07)

Grelek
Člen | 233
+
0
-

Pokud chceš přímo int, můžeš použít funkci is_int() nebo is_integer().

masterr
Začátečník | 141
+
0
-

já chci přímo ve fci kde zadávám parametry přetypovat na integer, což by mělo jít pomocí (int)$prom, ale nejde…

grongor
Člen | 31
+
0
-

@masterr: kde bereš tu jistotu, že by to mělo jít? To, že chceš aby to šlo neznamená, že by to jít mělo. Přečti si to, co jsem ti poslal. To co chceš ty dělat v PHP prostě nativně nejde.

Šaman
Člen | 2666
+
0
-

K určení parametru funkce můžeš použít JEN třídu, interface, nebo pole. Bohužel.
Přetypování v definici funkce nejde. Bohudík.