Class App\Presenters\StrankaPresenter was found, but it cannot be loaded by autoloading

Dave111
Člen | 10
+
0
-

Ahoj, potýkám se s tímto errorem a už nevím co s tím.
V mé aplikaci, každý presenter funguje bez problému, ale tento nový ne.

namespace App\Presenters;

use Nette\Application\UI\Presenter;

final class StrankaPresenter extends BasePresenter
{
    private  $utils;

    function __construct(Utils $utils)
    {
        $this->utils = $utils;
    }

}
m.brecher
Generous Backer | 700
+
-1
-

Pošli detaily o té chybě, chyba může být způsobená řadou věcí. Třeba – $utils není služba, chybí latte šablona, …

Dave111
Člen | 10
+
0
-

Šablona existuje, odkazuji na ni takto:

<a n:href="Stranka:stranka">

Struktura souborů
App
-model
 –Utils.php
-presenters
 –templates
---Stranka
----stranka.latte
 –StrankaPresenter.php

Po nějakém šťourání v kódu nastala nová chyba
Cannot load presenter ‚Stranka‘, class ‚App\Presenters\StrankaPresenter‘ was not found.
Přitom tento presenter existuje

Editoval Dave111 (18. 1. 2023 13:53)

scientific
Člen | 92
+
0
-

Zapni si Tracy Debbuger, on ti vlastně sám řekne, co Nette chybí, co je špatně. Taky to neumím, jen si vždy nechávám debbugerem radit, co mám delat.

Dave111
Člen | 10
+
0
-

Tracy mám, jenže to co mi tvrdí že chybí ve skutečnosti nechybí. Nebo, Tracy má určitě pravdu, jen já nevím co mám kde opravit aby vše jelo jak má, protože podle toho co z ní vyčtu nikde nic nechybí.

nightfish
Člen | 465
+
+1
-

@Dave111 Chybovou hlášku vyhazuje SearchExtension v https://github.com/…xtension.php#L92

Příčinou je nefunkčnost autoloaderu – pokud vidím správně, máš název adresáře s presentery presenters, zatímco název namespacu je Presenters (s velkým počátečním písmenem), což PSR-4 autoloaderu. Takže přejmenuj adresář na Presenters (pokud by to nešlo napřímo, tak nejdřív na presenters2 a pak až na Presenters), případně smaž cache, případně spusť composer dump-autoload a mělo by to začít fungovat.

m.brecher
Generous Backer | 700
+
0
-

@Dave111 Sorry, přehlédl jsem chybové hlášení v titulku, nějaký problém je s autoloadingem tříd v aplikaci. Třídy v adresáři vendor načítá autoloading composeru – tedy i Nette, třídy v adresáři /app načítá RobotLoader Nette. Třídy Nette se Ti načítají, třídy aplikace ne, takže možná něco s RobotLoaderem. RobotLoader se aktivuje v Bootstrap.php. Pošli jak máš Bootstrap.php ;)

Editoval m.brecher (18. 1. 2023 14:38)

Dave111
Člen | 10
+
0
-

nightfish napsal(a):

@Dave111 Chybovou hlášku vyhazuje SearchExtension v https://github.com/…xtension.php#L92

Příčinou je nefunkčnost autoloaderu – pokud vidím správně, máš název adresáře s presentery presenters, zatímco název namespacu je Presenters (s velkým počátečním písmenem), což PSR-4 autoloaderu. Takže přejmenuj adresář na Presenters (pokud by to nešlo napřímo, tak nejdřív na presenters2 a pak až na Presenters), případně smaž cache, případně spusť composer dump-autoload a mělo by to začít fungovat.

Jednoduše jsem přepsal jedno písmeno v namespace a vše je vyřešeno, děkuji za radu. Toto řešení mě napadlo také, ale ani jsem se jej neobtěžoval zkoušet, protože v aplikaci mám i další presentery se stejným namespace jako je v originální otázce, a všechny tyto presentery fungují, tedy s touto chybou. Proč, to je mi záhadou, ale raději do toho zasahovat nebudu :-)