Parametry a jejich přetypování v presenteru
- Pavel Kravčík
- Člen | 1196
Řešíte nějak následující? Tohle samozřejmě hodí chybu v tom, že
parametr není int
, ale string
.
// Nějaká URL
project.local/form?categoryId=1
// Presenter má komponentu form
pf createComponentForm(): CustomForm
{
return $this->factory->create()
->setCategoryId($this->getParameter('categoryId'));
}
// Funkce v komponentě na nastavení stavu
pf setCategoryId(?int $categoryId): self
{}
Řešené to může být například následovně:
pf setCategoryId(?string $categoryId): self
{
$this->categoryId = $categoryId ? intval($categoryId) : null;
}
Co by se mi líbilo třeba přes anotaci nebo podobně jako jsou persistentní parametry, nevím ani proč. :)
// Presenter
/** @property ?int $categoryId */
- joe
- Člen | 313
A nejde to řešit třeba jenom takto?
public function actionDefault(int $categoryId) {
/** @var CustomForm $customForm */
$customForm = $this->getComponent('customForm');
$customForm->setCategoryId($categoryId);
}
Kód
setCategoryId(?string $categoryId)
se mi nelíbí, protože metoda říká, nastav ID kategorie, ale přitom její parametr je string.
- Petr Steinbauer
- Člen | 26
Já to dělám takto:
- v routě kvuli hezke url zminim
$router->addRoute('category/<categoryId>', 'Category:default');
- v Presenteru nastavim privatni promenou
/** @var int|null $categoryId */
private $categoryId = null;
- a pak ji v action nastavim
public function actionDefault(?int $categoryId)
{
$this->categoryId = $categoryId;
}
- kdyz ji pak potrebuju, mám ji pozadovaneho typu
public function createComponentForm(): CustomForm
{
return $this->factory->create()->setCategoryId($this->categoryId);
}
- Petr Steinbauer
- Člen | 26
joe napsal(a):
Prijde mi, ze nastavovani komponenty kdekoli jinde nez pres action ji dela NE znovu pouzitelnou, protoze muze byt pouzita pri ruznych akcich s ruznym nastavenim (pokud nejde o single action presentery)
Beru to tak, že tím že ji svážu přes this, tak ji oficiálně „schválím“.
V praxi jsem se s přesunem komponent někam jinam moc nesetkal – a když, tak to $this->XXX mě na to hned upozorní.
Mno, a pak jsou komponenty, co si to berou samy a do url si strkají parametry jako divé (na tebe koukám, ublabooGride :) ) Ty si pak ale typování řeší sami v sobě.
- joe
- Člen | 313
@PetrSteinbauer Tomu moc nerozumím, já to myslel asi trochu jinak,
pokud má presenter více akcí a v každé z nich použiju stejnou
komponentu, pak mám na výběr, jestli napsat továrnu
(createComponent...
) jenom jednu a pak v každé
action...
si ji přizpůsobit a nebo napsat továren více. To, co
je vhodnější, nejspíš záleží na způsobu nastavení té komponenty.
Pokud se nastavení například liší jen v nastavení zdroje pro zobrazení,
pak asi není důvod psát dvě továrny … nebo? :-)