Připojení modelu v nette 2.1

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

Dobrý den,

mám problém s propojením modelu a presenteru. Metodu injectuju. Pokud ve funkci injectAppRepository otestuji výpis z db tak vše funguje normálně, ale v metodě beforeRender už $this->table není dostupné. Mrkněte prosím na presenter čím to může být. Díky

Do komentářů jsem připsal kde mi to dělá chybu. Moc díky za pomoc.

<?php
namespace App;

use Nette,
	Model,
	GettextTranslator,
	Nette\Application\UI\Form;
use Model\AppRepository;

/**
 * Base presenter for all application presenters.
 */
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
	/** @persistent */
	public $perpage;
	public $konk;
	public $lang;
	protected $translator;

	private $table;

	public function injectAppRepository(AppRepository $table)
	{
		$this->table = $table;
		// při testu je tu metoda $this->table normálně funkční, připojím se k db a získám data
	}

	public function injectTranslator(GettextTranslator\Gettext $translator)
	{
		$this->translator = $translator;

	}

	protected function startup()
	{
		parent::startup();

		if (!$this->session->isStarted()) {
			$this->session->start();
		}

	}

	public function createTemplate($class = NULL)
	{
		$template = parent::createTemplate($class);

		// if not set, the default language will be used
		$user = $this->getUser();
		if($user->isLoggedIn()){
			$lang = $user->getIdentity()->lang;
			$this->lang = $lang;
		}else{
			if (!$this->getParameter('lang')) {
				$this->lang = 'cs';
			} else {
				$this->lang = $this->getParameter('lang');
			}
		}
		$this->translator->setLang($this->lang);

		$template->setTranslator($this->translator);

		return $template;
	}

	public function beforeRender()
	{
		if (!$this->getParameter('lang')) {
			$this->template->lang = 'cs';
		} else {
			$this->template->lang = $this->getParameter('lang');
		}
		$user = $this->getUser();
		if($user->isLoggedIn()){
			$eshop = $user->getIdentity()->eshop;
			$konk = $this->table->findAll('konk')->where(array('eshop' => $eshop));
			//ale tady už mi píše Call to a member function findAll() on a non-object
			$this->template->konkshow = $konk;
			$this->template->konk = count($konk);
?>
Jan Tvrdík
Nette guru | 2595
+
0
-

To musí fungovat =)

Aleš Jandera
Člen | 24
+
0
-

Jan Tvrdík napsal(a):

To musí fungovat =)

I já si myslím že to musí fungovat, ale nefunguje. Nenapadá tě čím by to mohlo být? Je to převod aplikace ze staršího nette. Do nového sandboxu jsem převedl presentery, templaty atd, config jsem ručně přepsal a model jsem předělal.

David Matějka
Moderator | 6445
+
0
-

neprepisujes property table nebo injectAppRepository metodu nekde (v podedene tride treba)? zavola se inject* metoda? (zkus si to tam dumpnout)

Aleš Jandera
Člen | 24
+
0
-

matej21 napsal(a):

neprepisujes property table nebo injectAppRepository metodu nekde (v podedene tride treba)? zavola se inject* metoda? (zkus si to tam dumpnout)

No díky za naťuknutí teď už se dostanu břes beforeRender až do renderDefault homepage presenteru kde to napíše tu samou chubu. $table jsem přepsal na public, tak by měla být dostupná všude. Nebo se pletu?

Aleš Jandera
Člen | 24
+
0
-

Uz je to v pořádku, děkuji za pomoc a nasměrování, občas stačí si to takhle napsat a chybu uvidíte. Neměl jsem to public a měl jsem to dvakrát deklarovaný a to se mu nelíbilo. Děkuji matej21