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)