Získávání paramentrů v komponentě
- konva
- Člen | 88
Ahoj,
chci si ověřit jestli postupuji správně. Mám komponentu, kterou si
vytvářím jako továrničku.
<?php
-
implement: Components\VotesFactory
class: Components\Votes
arguments: [%key%, %user%, %http%]
parameters: [key, user, http]
?>
V teto komponentě potřebuji info o uživateli a IP adrese, tedy to co ziskam v prezenteru takto
<?php
$this->getUser();
$this->getHttpRequest();
?>
Postupuji správně když v presenteru předávám komponentě objekty uživatele a http
<?php
function createComponentVotes(){
$votes = $this->votesFactory->create($this->article->id, $this->getUser(), $this->getHttpRequest());
return $votes;
}
?>
a v komponentě takto přijímám
<?php
public function __construct($id, $user, $http, \Nette\Database\Context $db, \Nette\Http\Session $session){
$this->db = $db;
$this->id = $id;
$this->user = $user;
$this->http = $http;
$this->sessionVotes = $session->getSection("votes");
}
?>
Nebo je nějaká lepší cesta? Stejně tak s tou session. Je to tak OK?
Díky za odpověď
Lukáš
- Vojtěch Dobeš
- Gold Partner | 1316
Lepší cesta existuje, ale jinak to máš dobře, ta lepší cesta je jen zkratkou :)
Registrace v services
:
-
implement: Components\VotesFactory
create: Components\Votes(%key%)
parameters: [key]
Podoba konstruktoru:
public function __construct($id, \Nette\Security\User $user, \Nette\Http\Request $httpRequest, \Nette\Database\Context $db, \Nette\Http\Session $session)
{
$this->id = $id;
$this->user = $user;
$this->httpRequest = $httpRequest;
$this->db = $db;
$this->sessionVotes = $session->getSection("votes");
}
Továrnička v presenteru:
function createComponentVotes(
{
return $this->votesFactory->create($this->article->id);
}
Pointa je v tom, že všechny ty 4 závislosti jsou standardně
registrované jako služby, a tedy když uvedeš v konstruktoru typehinty, samo
se ti to poskládá dohromady. V tom interfacu VotesFactory
pak
stačí uvést onen parametr $key
a žádný další.
Ad session: to je zcela v pořádku.
Editoval vojtech.dobes (24. 1. 2014 14:04)
- David Matějka
- Moderator | 6445
se session postupujes spravne, stejne tak s db, je ale zbytecne posilat
takhle http request, ten si muzes vyzadat stejnym zpusobem jako ostatni sluzby
(typehint \Nette\Http\IRequest
) a vlastne i usera si muzes vyzadat
pomoci typehintu \Nette\Security\User
, takze do create posilej jen
id (nebo zvaz, jestli neni lepsi posilat cely article a ne jen jeho id)
//pozde
Editoval matej21 (24. 1. 2014 14:07)