Jak v komponentě použít $this->getUser()

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

Dobrý den,

mám komponentu Download která vypisuje soubory ke stažení a má druhou část, která by měla vypisovat soubory, které přísluší jen přihlášeným uživatelům. V šabloně jsem udělal podmínku, když nebude uživatel přihlášený vloží se {control loginForm}, ale nevím, ale když to spustím, tracy hlásí: Call to undefined method App\Components\DownloadControl::getUser().

Tady je ten DownloadControl.php:

<?php

namespace App\Components;

use Nette\Application\UI\Control;

class DownloadControl extends Control
{

		protected function createComponentLoginForm()
		{
			$form = new \Nette\Application\UI\Form;
			$form->addText('username', 'Username:')
				->setRequired('Prosím, zadejte uživatelské jméno');

			$form->addPassword('password', 'Password:')
				->setRequired('Prosím zadejte heslo');

			$form->addSubmit('send', 'Přihlášen');

			// call method signInFormSucceeded() on success
			$form->onSuccess[] = $this->loginFormSucceeded;
			return $form;
		}


		public function loginFormSucceeded($form, $values)
		{
			$this->getUser()->setExpiration('20 minutes', TRUE);

			try {
				$this->getUser()->login($values->username, $values->password);
				//$this->redirect('Homepage:');

			} catch (Nette\Security\AuthenticationException $e) {
				$form->addError($e->getMessage());
			}
		}
}

Tady kdyžtak šablona:

Soubory ke stažení

<div n:foreach="$files as $file">

	{$file[name]}<br>

</div>

{if $user->isAllowed('securityDownload')}

<div n:foreach="$securityFiles as $file">

	{$file[name]}<br>

</div>

{else}

	{control loginForm}

{/if}

Může mi někdo poradit, jak udělat aby se šlo přihlašovat z komponenty? Děkuji

Editoval wassy (28. 7. 2014 12:38)

Mariocz
Člen | 52
+
-6
-
$user = $this->presenter->getUser();

nebo si ho předat při vytváření komponenty

David Kudera
Člen | 455
+
+4
-

samo se to tam nedostane ;-)

use Nette\Security\User;

class DownloadControl extends Control
{


	/** @var \Nette\Security\User */
	private $user;


	/**
	 * @param \Nette\Security\User $user
	 */
	public function __construct(User $user)
	{
		parent::__construct();

		$this->user = $user;
	}

}

no a volání $this->getUser() změnit na $this->user

jo a počítá to s tím, že ta komponenta je registrovanou službou

Michal Vyšinský
Člen | 608
+
+3
-

Mariocz napsal(a):

$user = $this->presenter->getUser();

nebo si ho předat při vytváření komponenty

Přes presenter nikdy! Schováváš závislosti. Jediná čistá varianta je předání služby Nette\Security\User v konstruktoru.

wassy
Člen | 46
+
0
-

Mariocz napsal(a):

$user = $this->presenter->getUser();

nebo si ho předat při vytváření komponenty

Díky za pomoc, mimochodem, jak bych si ho mohl předat při vytváření komponenty? S nette jsem začal nedávno a postupně zjišťuju co všechno to umí :)