Předání jména aktuálního uživatele do komentáře

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

Čau vytvořil sem si podle quickstartu blog s komentáři a chtěl bych poradit jak vzít aktuální jméno přihlášeného uživatele a použít ho v PostPresenteru.

public function commentFormSucceeded($form, $values)
	{
		$postId = $this->getParameter('postId');
		$this->database->table('comments')->insert([
			'post_id' => $postId,
			'name' => $this->getUser()->$values['name'], <<<<
			'email' => $values->email,
			'content' => $values->content,
		]);

		$this->flashMessage('Děkuji za komentář', 'success');
		$this->redirect('this');
	}

Děkuji za vaše rady

Jan Mikeš
Člen | 771
+
+4
-

Máš mnohem lepší, pokud do DB uložíš pouze id uživatele a vytvoříš si cizí klíč na tabulku s uživateli, ve výsledku by ten tvůj insert vypadal takto:

	$this->database->table('comments')->insert([
    'post_id' => $postId,
    'user_id' => $this->getUser()->getId(),
    'email' => $values->email,
    'content' => $values->content,
]);

Potom v šabloně můžeš použít klidně toto:

Komentář napsal: {$comment->user->name}

Kdy se ti automaticky přes cizí klíč propojí tabulky comments a user.

Abych ale plně odpověděl na tvou otázku, z aktuálního uživatele pouze jméno dostaneš následně:

	$this->getUser()->getIdentity()->name;
	// nebo zkráceně přes magické __get()
	$this->user->identity->name;

Editoval Lexi (14. 9. 2016 19:24)

mi85
Člen | 41
+
0
-

Lexi napsal(a):

Máš mnohem lepší, pokud do DB uložíš pouze id uživatele a vytvoříš si cizí klíč na tabulku s uživateli, ve výsledku by ten tvůj insert vypadal takto:

	$this->database->table('comments')->insert([
    'post_id' => $postId,
    'user_id' => $this->getUser()->getId(),
    'email' => $values->email,
    'content' => $values->content,
]);

Potom v šabloně můžeš použít klidně toto:

Komentář napsal: {$comment->user->name}

Kdy se ti automaticky přes cizí klíč propojí tabulky comments a user.

Abych ale plně odpověděl na tvou otázku, z aktuálního uživatele pouze jméno dostaneš následně:

	$this->getUser()->getIdentity()->name;
	// nebo zkráceně přes magické __get()
	$this->user->identity->name;

Děkuji! :-)

mi85
Člen | 41
+
0
-

Upravil jsem to tedy na

			'name' => $this->getUser()->getIdentity()->name,

ale do databáze mi to dává hodnotu u jména NULL.

  • editor mi ukazuje u name Field ‚name‘ not found in \Nette\Security\IIdentity|NULL less…

Editoval mi85 (14. 9. 2016 20:08)

Šaman
Člen | 2666
+
0
-

Udělej si dump té $this->getUser()->getIdentity(). Jestli tam zádný name není, tak ho odtud nedostaneš. V identitě je jen to, co sis tam při přihlášení uložil. A pozor na to, že informace tam nemusí být aktuální (třeba po změně jména přuhlášeného uživatele zůstává v session původní identita). Lepší je pracovat jen s tím $id.