Jak získat id user v komponentě

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
sppilka
Člen | 37
+
0
-

Zdravím,

Chtěl jsem se zeptat jde nějakým způsobem získat user ID v komponentě?

Díky

Jan Mikeš
Člen | 771
+
0
-
	$this->presenter->user->getId();

Toto nefunguje?

Edit: pripadne si ho muzes predavat pres konsturktor primo do komponenty, vytvareni komponenty v presenteru:

public function createComponentX(){
	new MujControl($this->user->id);
}

Editoval Lexi (22. 8. 2012 18:38)

sppilka
Člen | 37
+
0
-

Díky,

Tak trochu jsem vynechal presenter :)

Patrik Votoček
Člen | 2221
+
0
-

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
+
0
-

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;
}
castamir
Člen | 629
+
0
-

@OK3 to záleží na samotné třídě MujControl, jestli dědí třeba od Nette\ComponentModel\Component. Popravdě ne vždy je to potřeba…

sppilka
Člen | 37
+
0
-

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
+
0
-

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
+
0
-

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.

Filip Procházka
Moderator | 4668
+
0
-

Pokus se prosím udělat model novým způsobem.