Získání dat z Repository do Base Presenteru

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

Ahoj,
mam pro vás zřejmě jednoduchou věc, ale..

Potřebuji z Repository dostat do BasePresenteru jméno uživatele, který se získává z databáze.

BasePresenter

<?php
namespace App\Presenters;
use Nette;
use App\Model;
/**
 * Base presenter for all application presenters.
 */
abstract class BasePresenter extends Nette\Application\UI\Presenter {

    /** @var \Repository @inject */
    private $baseModel;

    public function beforeRender() {
        if ($this->getUser()->isLoggedIn() == true) {
            $this->template->username = $this->baseModel->getUsername($this->getUser()->getId())->username;

        } else {
            $this->template->username = null;
        }
    }
}

Repository.php ve složce model

<?php

abstract class Repository extends Nette\Object {

    /** @var Nette\Database\Context */
    protected $database;

    public function __construct(Nette\Database\Context $database) {
        $this->database = $database;
    }

    /* Vrátí jméno uživatele */

    public function getUsername($userId) {
        return $this->database->table("users")->where("id", $userId)->fetch();
    }
}

Vrací chybu:

Call to a member function getUsername() on null

a dump($this->baseModel); vypisuje NULL

Díky za radu

David Matějka
Moderator | 6445
+
+2
-

@inject properties museji byt public

Klobasa
Člen | 16
+
0
-

Jo, díky moc, funguje :)

Ještě doplnim:

Při použití Repository skáče chyba

Multiple services of type Repository found:

Takže jsem použil toto:

/** @var \BaseRepository @inject */
public $baseModel;

a

<?php

class BaseRepository extends Repository {

}

Snad někomu pomůže :)

CZechBoY
Člen | 3608
+
0
-

Udělej si radši spešl repo (final class), třeba UserRepository s metodou getUsername a tu si injectni do basepresenteru.

Editoval CZechBoY (4. 11. 2016 15:46)