Připojení externí php knihovny do Nette projektu

Danny
Člen | 146
+
0
-

Dobrý den,
potřeboval bych poradit jak připojit knihovnu do Nette projektu. Nemohu použít composer protože jestli jsem dobře pochopil neni tato knihovna pro to podporovaná.
Potřebuji tedy najít způsob jak nejlépe ten 1 soubor .php připojit do projektu a abych mohl například v presenteru vytvořit instanci té třídy z knihovny a používat ji.

Je nejlepší způsob natvrdo připojit takhle knihovnu?

$configurator->createRobotLoader()
	->addDirectory(__DIR__)
	->addDirectory(__DIR__ . '/../libs/api/')
	->register();

Nebo raději zvolit nějaký jiný?

Děkuji moc :)

Editoval Danny (16. 4. 2017 22:31)

CZechBoY
Člen | 3608
+
0
-

Buď přes Nette/RobotLoader nebo přes Composer Autoloader.
Já bych asi šel tou cestou composeru – ten se u mě stará o knihovny a robotloader o aplikaci.

Danny
Člen | 146
+
0
-

Díky za odpoveď :)

Pokud tedy použiju autoload v composeru

"autoload": {
    "classmap": {"MojeJmeno": "libs/"},
},

Jak jsem pak schopný s tou knihovnu pracovat např z presenteru?

CZechBoY
Člen | 3608
+
0
-

jj můžeš použít kdekoliv kde vložíš ten načítací skript vendor/composer/autoload.php, tzn. jo, je vloženej i v klasický Nette aplikaci.

Danny
Člen | 146
+
0
-

Nevim jestli teď přesně rozumim, jde mi spíš o to jak k té knihovně budu přistupovat?

Tedy jak mám např v tom presenteru vytvářet její instanci, na základě jaké cesty

class ServicePresenter extends BasePresenter
{

	public function renderDefault()
	{
		$API = new MojeJmeno\NazevApi();
			......
CZechBoY
Člen | 3608
+
0
-

Klasicky cesta jakou má ta knihovna (podle namespacu + jméno třídy). Na tohle autoloader nemá vůbec vliv.

Danny
Člen | 146
+
0
-

Já právě nejsem schopný ji napojit. Mám to uložené v

/libs/Routeros/RouterosApi.php
název té třídy je RouterosAPI

V autoloadu loaduju celou složku /libs

"autoload": {
    "classmap": {"MojeJmeno": "libs/"},
},

A když se tu API snažim instacovat tak volám

$API = new \Routeros\RouterosApi\RouterosAPI();

Asi mi uniká nějaký základní kámen nette aplikace jako takové :/

CZechBoY
Člen | 3608
+
0
-

Tady to maj úplně jinak
https://github.com/…omposer.json

"autoload": {
    "classmap": [
        "routeros_api.class.php"
    ]
}
jiri.pudil
Nette Blogger | 1028
+
+1
-

Jak píše @CZechBoY, do classmap se dává pole cest

"autoload": {
    "classmap": ["libs/"]
}

Taky pozor na to, že se ti nebudou automaticky načítat soubory, které do té složky nově přidáš; musíš nejdřív přegenerovat autoloader pomocí composer dump-autoload

Danny
Člen | 146
+
0
-

Ok už mi to funguje, díky moc za rady :)