Jak v komponentě použít $this->getUser()
- wassy
- Člen | 46
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)
- David Kudera
- Člen | 455
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
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.