Předání id přihlášeného uživatele do komponenty

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

Zdravím, mohl by mi prosím někdo poradit, jak mám id přihlášeného uživatele předat do komponenty, kod uvádím níže. Vypisuje se mi chyba Undefined variable: user

<?php

namespace App\Forms;

use Nette;
use Nette\Application\UI\Form;
use Nette\Security\User;
use App\Model;
use App\Model\CategoryManager;
use App\Model\RecordsManager;

class RecordsFormFactory
{
	use Nette\SmartObject;

	/** @var FormFactory */
	private $factory;

    /** @var CategoryManager */
    private $categoryManager;

    /** @var RecordsManager */
    private $recordsManager;

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


	public function __construct(FormFactory $factory, CategoryManager $categoryManager, RecordsManager $recordsManager, User $user)
	{
		$this->factory = $factory;
		$this->categoryManager = $categoryManager;
		$this->recordsManager = $recordsManager;
		$this->user = $user;

	}

	/**
	 * @return Form
	 */
	public function create(callable $onSuccess)
	{


		$form = $this->factory->create();


		$form->addText('pretender', 'Žadatel:')
		->setRequired('Zadejte žadatele.');

		$category = $this->categoryManager->getCategory();
		$form->addSelect('IdCategory', 'Výpis:', $category)
		->setPrompt('Zvolte typ výpisu');

		$form->addText('price', 'Cena:')
		->setRequired('Zadejte cenu výpisu.');

		$form->addSubmit('send', 'Uložit');
		$form->onSuccess[] = function (Form $form, $values) use ($onSuccess) {
			try {
				$this->recordsManager->saveRecord($values->number,**$user->id**, $values->IdCategory, $values->pretender, $values->price);
			} catch (Nette\Security\AuthenticationException $e) {
				$form->addError('Uživatelské jméno nebo heslo není správné.');
				return;
			}
			$onSuccess();
		};

		return $form;
	}

}
Pavel Kravčík
Člen | 1196
+
0
-

Třeba takto:

//Presenter
protected function createComponentRecordForm()
{
$control = $this->IRecordFactory->create();
$control->setUserId($this->getUser()->getId());
return $control;
}

Nebo jako parametr do create(), ale pak ho musíš uvést jako první v constructoru komponenty.

CZechBoY
Člen | 3608
+
+2
-

Použij $this->user->getId().

Mysteria
Člen | 797
+
+3
-

Nemáš tam jenom překlep? Místo $user->id dát $this->user->id.

iNviNho
Člen | 352
+
+1
-

Alebo

<?php
// toto ešte vlož do formu
$form->onSuccess[] = [$this, "add"];

// pridaj metódu
public function add(Form $form) {

	$values = $form->getValues();

	try {
                $this->recordsManager->saveRecord($values->number,**$this->user->id**, $values->IdCategory, 		$values->pretender, $values->price);
            } catch (Nette\Security\AuthenticationException $e) {
                $form->addError('Uživatelské jméno nebo heslo není správné.');
                return;
            }

}
?>

Editoval iNviNho (23. 1. 2017 12:02)

Taps
Člen | 169
+
0
-

Děkuji, byl to jen překlep, tak jak napsal @Mysteria, každopádně díky všem za rozšíření mých znalostí.