Sluba vyzadovana v constructoru nenalezena

markoska
Člen | 12
+
0
-

Mam nasledujici tridy:

App/Presenters/MerakyPresenter.php:

declare(strict_types=1);

namespace App\Presenters;

use Nette;
use Nette\Application\UI\Form;

final class MerakyPresenter extends Nette\Application\UI\Presenter
{
    use Nette\SmartObject;
    private Nette\Database\Explorer $database;

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

App/Presenters/OdectyPresenter.php:

namespace App\Presenters;

use Nette;
use Nette\Application\UI\Form;

final class OdectyPresenter extends Nette\Application\UI\Presenter
{
	use Nette\SmartObject;
    private Nette\Database\Explorer $database;
    private MerakyPresenter $meraky;

    public function __construct (Nette\Database\Explorer $database, MerakyPresenter $meraky)
    {
        $this->database = $database;
        $this->meraky = $meraky;
    }

V souboru common.neon mam toto:

application:
    errorPresenter: Error
    mapping:
        *: App\Presenters\*Presenter

A v souboru services.neon toto:

services:
    - App\Router\RouterFactory::createRouter
    - App\Presenters\MerakyPresenter
    - App\Presenters\OdectyPresenter

A Nette mi porad vraci chybu:

Service of type App\Presenters\OdectyPresenter: Service of type App\Presenters\MerakyPresenter required by $meraky in OdectyPresenter::__construct() not found. Did you add it to configuration file?

Co delam spatne? Dekuji

Kamil Valenta
Člen | 758
+
0
-

Proč se snažíš používat presenter jako service? Udělej si z Meraky normální modelovou classu.

markoska
Člen | 12
+
0
-

Aha to ja nevedel. Ja myslel, ze trida jako trida, ze je to jedno.

Mam tomu tedy rozumet tak, ze kdyz trida Meraky nebude potomkem Nette\Application\UI\Presenter, ze to bude fungovat?

Dekuji, jdu to vyzkouset

SankaCoffee
Člen | 8
+
0
-

markoska napsal(a):

Aha to ja nevedel. Ja myslel, ze trida jako trida, ze je to jedno.

Mam tomu tedy rozumet tak, ze kdyz trida Meraky nebude potomkem Nette\Application\UI\Presenter, ze to bude fungovat?

Dekuji, jdu to vyzkouset

Presenter slouží k tomu, aby reagoval na vstup od uživatele, tj. vybere požadovanou šablonu, vytahá z modelu potřebná data, ty předá šabloně a nic víc. V tvém případě by přístup na http://mojeurl.cz/odecty spustil OdectyPresenter. Pokud tam chceš vytahat data z měřáků, tak k tomu slouží modelová třída a ne presenter, tak jak píše @KamilValenta.

Třídu MerakyPresenter přejmenuj a přesuň do app/Model/… a náležitě tomu přizpůsob i namespace. V této třídě si pak už implementuj získávání hodnot po svém. Dědění z Nette\Application\UI\Presenter samozřejmě u této třídy zruš.

xxxPresenter by se měla jmenovat pouze třída, která má sloužit jako presenter.
Více o presenterech najdeš zde: https://doc.nette.org/…n/presenters

markoska
Člen | 12
+
0
-

SankaCoffee napsal(a):

markoska napsal(a):

Aha to ja nevedel. Ja myslel, ze trida jako trida, ze je to jedno.

Mam tomu tedy rozumet tak, ze kdyz trida Meraky nebude potomkem Nette\Application\UI\Presenter, ze to bude fungovat?

Dekuji, jdu to vyzkouset

Presenter slouží k tomu, aby reagoval na vstup od uživatele, tj. vybere požadovanou šablonu, vytahá z modelu potřebná data, ty předá šabloně a nic víc. V tvém případě by přístup na http://mojeurl.cz/odecty spustil OdectyPresenter. Pokud tam chceš vytahat data z měřáků, tak k tomu slouží modelová třída a ne presenter, tak jak píše @KamilValenta.

Třídu MerakyPresenter přejmenuj a přesuň do app/Model/… a náležitě tomu přizpůsob i namespace. V této třídě si pak už implementuj získávání hodnot po svém. Dědění z Nette\Application\UI\Presenter samozřejmě u této třídy zruš.

xxxPresenter by se měla jmenovat pouze třída, která má sloužit jako presenter.
Více o presenterech najdeš zde: https://doc.nette.org/…n/presenters

Diky, uz jsem tak ucinil a funguje to jak ma. Je to pro me vsechno nove, vcetne samotneho OOP

Ale uz jsem si uvedomil, kde jsem udelal chybu: ignoroval jsem v tutorialu kapitolu Autentifikace, protoze ji nepotrebuji, a tim padem jsem se nedostal do kapitoly Model. Jestli by to nechtelo kapitolu Model predradit te Autentifikaci

Diky vsem za pomoc a mejte se!

David Grudl
Nette Core | 8108
+
0
-

@markoska dobrý nápad, přehodil jsem to.