Jak získat id user v komponentě
- Patrik Votoček
- Člen | 2221
pokud v komponentě něco potřebuješ tak si to do ní předej a né že to budeš tahat přes presenter (to je cesta do pekel).
- OK3
- Člen | 91
Lexi napsal(a):
public function createComponentX(){ new MujControl($this->user->id); }
Předat ano, ale určitě ne takto :D Podívej se na konstrukor https://api.nette.org/…mponent.html, dávají se tam jiné parametry.
Pokud chceš komponentě něco předat, šlo by to (třeba) takto:
public function createComponentX($name){
$control = new MujControl($this, $name);
$control->setUser($this->user); // setter si napíšeš
return $control;
}
- sppilka
- Člen | 37
No v Nette jsem začátečník, ale prostě pokaždé když jsem vytvořil komponentu např:
public function createComponentPrintLessonInfo() {
$env = \Nette\Environment::getHttpRequest();
$session = $env->getCookie('PHPSESSID');
$idLesson = $this->context->createTempSelectors()->where('sessid = ?', $session)->fetch();
$lesson_data = $this->context->createActiveLessons()->where('id_lesson = ? AND student_name = ?', $idLesson["id_lesson"], $this->user->getIdentity()->name);
return new LessonList($lesson_data, $this->context->createActiveLessons());
}
tak v LesoonList jsem někdy potřeboval data i z jiné tabulky než z té co sem si tam poslal… proto mě stačilo si vzít idcko od přihálšeného.. ten 1. způsob mi postačil
Jak by to tedy šlo v tomto případě jinou cestou než mi poradil Lexi?
Editoval sppilka (23. 8. 2012 15:57)
- Patrik Votoček
- Člen | 2221
OK3 napsal(a):
Předat ano, ale určitě ne takto :D Podívej se na konstrukor https://api.nette.org/…mponent.html, dávají se tam jiné parametry.
Naopak takhle je to dobře… Výchozí konstruktor neznamená že nejde přepsat… To co tam je teď je tam jen a pouze z historických důvodů.
- Patrik Votoček
- Člen | 2221
sppilka napsal(a):
No v Nette jsem začátečník, ale prostě pokaždé když jsem vytvořil komponentu např: …
- V první řadě používat Nette\Http\Session.
- V řadě druhé nepoužívat Environment
- Ve třetí řadě nepoužívat jednou getter a podruhé property
- továrničky na komponenty mají být protected
protected function createComponentPrintLessonInfo()
{
$session = $this->getSession();
$model = $this->getContext()->createActiveLessons();
$studentName = $this->getUser()->getIdentity()->getName();
$data = $mode->where('id_lesson = ? AND student_name = ?', $session['id_lesson'], $studentName);
return new LessonList($data, $this->context->createActiveLessons());
}
Pochopitelně s vlastní session storage která ti vytáhne ty data z DB jak to máš v tom původním kódu.