PhpStorm označuje BasePresenter jako nedefinovanou třídu v odděděné třídě

gizer
Člen | 62
+
0
-

Dobrý den,
ve svém projektu používám Base presenter. Celé to funguje to a laděnka nic nehlásí. Obě třídy mám v nette v adresáři App\FrontModule\ Presenters.

Nevím proto, proč mně phpStorm udělá „higlight“ na odděděný BaseFrontpresenter? V popisu chyby zjistím, že jde o nedeklarovanou třídu. Proč, vždyť ji přece deklaruji v tom samém adresáři?

Samozřejmě ten „highlight“ jde vypnout v phpStormu File->Settings->Editor->Inspections->undefined symbols->undefined class v phpStorm verze 2021.3.1.

Děkuji za případnou radu. Posílám kód obou tříd.

AdvertmessagesPresenter:

declare(strict_types=1);
namespace App\FrontModule\Presenters;
use Nette;
use Nette\Application\UI\Form;


abstract class AdvertmessagesPresenter extends BaseFrontPresenter		//Highlighted BaseFrontPresenter
{

    public function renderAdvertmessages(): void
    {

        $this->template->advertmessages =  $this->database->table('advertmessages');
        $this->template->post = $this->database->table('posts')->get(1);
        $this->template->selfLink = $this->link('this');


    }

}

A samotný base presenter

BaseFrontPresenter:

declare(strict_types=1);

namespace App\FrontModule\Presenters;
use Nette;
use Nette\Http\SessionSection;
use Nette\Application\UI\Presenter;

abstract class BaseFrontPresenter extends Presenter
{
    /** @persistent */
    public $backlink = '';

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

    public function __construct(Nette\Database\Context $database)

    {
        parent::__construct();
        $this->database = $database;
    }
}
m.brecher
Backer | 128
+
0
-

A máš ty presentery v souborech se stejným názvem jako je název třídy, tj. především BaseFrontPresenter by měl být v souboru BaseFrontPresenter.php ??

gizer
Člen | 62
+
0
-

Ano mám. IDE phpStorm v takovém případě označí soubor písmenem „c“ jako class.

m.brecher
Backer | 128
+
0
-

Ahoj, ten kód vypadá v pořádku.

Drobná chyba – AdvertmessagesPresenter nesmí být abstract, ale final, protožře se z této třídy už další presenter nedědí, naopak se vytváří objekt a to z abstract classy nejde.

Zkus smazat v AdvertmessagesPresenter-u slovo BaseFrontPresenter za klíčovým slovem extends a napsat to znova s použitím nápovědy phpstormu, napíšeš Advertmess a on by měl příslušnou třídu i s namespace najít a nabídnout k dopsání. Pokud ji nenajde tak bude asi chyba v phpstormu – (update/reinstall?).

Nebo jednoduše zkus napsat jen tak nějaký jiný presenter poděděný z BaseFrontPresenter jestli se ta chyba zopakuje.

dakur
Člen | 357
+
0
-

Obě třídy mám v nette v adresáři App\FrontModule\ Presenters.

@gizer Mezi \ a Presenters je mezera – nejmenuje se ta složka Preseneters náhodou s mezerou na začátku? I když nevím, proč by kvůli tomu měl hlásit phpstorm undefined class..

Editoval dakur (10. 2. 17:29)

dakur
Člen | 357
+
+1
-

A zkontroluj si taky, že některá z těch mezer okolo BaseFrontPresenter není např. nedělitelná či zero-width space.

gizer
Člen | 62
+
0
-

Děkuji moc všem za rady. Problém zatím přetrvává i když jsem všechny podněty ověřil.

Přesto možná tuším, odkud se problém bere, i když zatím nevím jak to opravit. Stěhoval jsem projekt z jednoho PC na druhé. Jednoduše jsem to v novém PC stáhnul z gitHubu.

Teď jsem si nově všimnul, že mně odmítá refactoring-rename s hláškou „Selectd element is used from non-project files“ a nabídne „Proceed anyway“. Jakoby ty soubory nebyly součástí projektu.

Pokud někdo máte zkušenost s touto hláškou v phpStormu budu rád?

nightfish
Člen | 268
+
+2
-

gizer napsal(a):

Teď jsem si nově všimnul, že mně odmítá refactoring-rename s hláškou “Selectd element is used from non-project files” a nabídne “Proceed anyway”. Jakoby ty soubory nebyly součástí projektu.

Pokud někdo máte zkušenost s touto hláškou v phpStormu budu rád?

První věc, kterou bych zkusil, je vymazat cache v PHPStormu (menu File → Invalidate caches).
Druhá věc je zkontrolovat, že máš správně nastavené “Sources” adresáře (menu File → Settings → Directories – složka s PHP kódem projektu – např. app nebo src by měla být Marked as source).
Pokud by ani to nepomohlo, tak zavřít PHPStorm, smazat .idea v adresáři projektu, otevřít projekt v PHPStormu a znovu provést nastavení Sources.

MajklNajt
Člen | 426
+
0
-

@gizer ak nepomôže to, čo písal @nightfish, nesťahoval si to ako závislosť cez composer, čiže sa ti to stiahlo do vendoru?

gizer
Člen | 62
+
0
-

Super @nightfish :-) Tak pomohlo nastavit složku app v menu File → Settings → Directories. Všechny problémy pak zmizely.

Děkuji opravdu moc.