Vlastní knihovnu ve vendor se nedaří načíst

Terka04
Člen | 44
+
0
-

Zdravím všechny,
ráda bych si vytvořila vlastní knihovnu, kterou bych později ráda publikovala na github, abych ji mohla stahovat do projektů přes composer. Ale problém nyní.

Vlezla jsem do vendor a založila adresář „terka“, do něj „nazevknihovny“ a tam mám LICENCE, README.md, composer.json a adresář src, ve kterém mám samotnou knihovnu. Tedy stejně, jako vypadají jiné knihovny z packagist.org.

Do presenteru jsem potom dala:

use terka\nazevknihovny;

$promenna= new \terka\nazevknihovny();

V knihovně mám nastavený namespace na „terka\nazevknihovny“.

A dostávám chybu „Class ‚terka\nazevknihovny‘ not found“. Myslela jsem, že to robotLoader automaticky najde a „requirne“. Co je ještě potřeba správně udělat? Na co jsem zapomněla?

Děkuji všem za pomoc. :)

Editoval Terka04 (16. 2. 2022 10:09)

Marek Bartoš
Nette Blogger | 1171
+
+4
-

Balík nestačí mít ve složce vendor, musíš o něm Composeru říct tak, že jej přidáš přes composer require vendor/package. Název je v composer.json v klíči name

Aby ti Composer našel balík, který máš u sebe v počítači a ne na Packagistu, tak jej musíš přidat v composer.json v projektu v sekci repositories. Díky tomu ví, že má při composer require cesta prohledat a nebudeš muset mít balík přímo ve vendoru – Composer ti jej tam při instalaci sám vloží, pomocí symbolického odkazu

"repositories": [
    {
        "type": "path",
        "url": "../local_package",
        "options": {
            "symlink": true
        }
    }
],

Robotloader by určitě vendor prohledávat neměl a rozhodně to tak nedělá by-default. Standardní cesta je nastavit si v composer.json knihovny autoloading pomocí PSR-4 https://getcomposer.org/…04-schema.md#…

Možná tě Composer při instalaci upozorní, že daný balík neexistuje v požadované stabilitě „stable“. To vyřešíš tak, že Composeru dovolíš stahovat nestabilní závislosti. Je nutné umístit do composer.json v projektu, nastavení je root-only:

	"minimum-stability": "dev",
	"prefer-stable": true,

Píšeš, že namespace máš terka\nazevknihovny a dále v kódu máš new terka\nazevknihovny() – nejmenuje se třída kterou chceš vytvářet spíše terka\nazevknihovny\nazevtridy?

Editoval Marek Bartoš (16. 2. 2022 10:24)

Terka04
Člen | 44
+
0
-

Výborně, funguje to. Děkuji moc!

Marek Bartoš
Nette Blogger | 1171
+
0
-

@Terka04 Ještě mě tak napadá, že bys mohla zkusit můj orisai/library-template, pokud chceš i automatizaci připravenou na použití.

Momentálně jsou tam v základu připravené testy přes phpunit a infection, code coverage na coveralls.io, analýza kódu přes phpstan a coding standard. Všechny skripty jsou připravené v Makefile a pouští se na Github Actions.

Nynější dokumentace by měla být dostačující pro start, po stížnosti nejasnosti rád doplním