Nastavení DI v Neonu pro plugin z Composeru

sjiamnocna
Člen | 28
+
0
-

Ahoj, hraju si s Nette poprvé – tedy poprvé něco reálně dělám (nebo se snažím), nejen očumuju nette-application :) a už nějakou dobu se mi nedaří získat objekt Mathematicator/Tokenizer, a nenacházím nikde žádné příklady, jak by to mělo být, stejně jako jsem nenašel noob-friendly návod na manipulaci s DI.

Chtěl bych to přidat jako hrubou závislost do __constructor presenteru aplikace (mám Homepage a App presentery).

  1. Zřejmě jsem netrefil namespace, takže jaké namespace používat v případě pluginu z Composeru?

    Mathematicator\Tokenizer\Tokenizer nejde, částečně i proto, že jej Nette hledá pod App\Presenters\ což asi fungovat nebude. PHPStorm mi ale normálně referenci najde.

    Díky Bohu (a Davidovi) za Laděnku!!! :)

  2. Jak nastavit v Neonu, aby se mi – pakliže trefím namespace – vytvářela service a automaticky vkládala do konstruktoru?
<?php
   /**
   * @var Mathematicator\Tokenizer\Tokenizer $tozer
   */
  private $tozer;
  function __construct(Mathematicator\Tokenizer\Tokenizer $tozer)
  {
    $this->tozer = $tozer;
  }
?>
  1. Potřebuju do Neonu nacpat dvourozměrné pole konfigurací (tj. vzor konfigurace na Mathematicator/Tokenizer, kde pletou jabka a hrušky)?

Prozatím je mým cílem pouze rozchodit tu třídu. Díky za odpovědi

Editoval sjiamnocna (11. 9. 2019 19:23)

Marek Bartoš
Nette Blogger | 1280
+
0
-

Když jsi v namespace App\Presenters, tak se Mathematicator\Tokenizer\Tokenizer resolvuje v App\Presenters\Mathematicator\Tokenizer\Tokenizer. Aby se to tak nedělo, tak musíš buď použít absolutní namespace s lomítkem na začátku \Mathematicator\Tokenizer\Tokenizer nebo mezi namespace a třídu přidat use Mathematicator\Tokenizer\Tokenizer;

Lepší je imho používat use statements. Btw, používáš phpstorm? Stačí ti pak napsat jen název třídy a vybrat ji z nabídky, use statement se ti sám doplní.

Aby jsi mohl službu vyžadovat v konstruktoru nějaké jiné služby (v tomhle případě presenteru), tak ji musíš přidat do sekce services v neonu nebo zaregistrovat extension, která to udělá za tebe (pokud taková extension v knihovně je)

A takové detaily:

  • Jde o __construct ne o __constructor
  • composer pluginy jsou rozšíření composeru, to co přes composer instaluješ jsou obecně vzato knihovny, závislosti nebo balíčky
  • Za Tracy neděkuj Bohu, ale Davidovi ;)

Editoval Mabar (11. 9. 2019 10:41)

sjiamnocna
Člen | 28
+
0
-

Jo, samozřejmě __construct, snažil jsem se o čechizaci pojmu :)

Musím ji nastavit v services – nic co bych předtím nevěděl. Prolezl jsem dokumentace, videa z Posobot… Nikde žádný solidní příklad nastavení externí služby s parametry v neonu a mě zatím nic neprošlo, protože v __construct jsou další závislosti. :/

Celá knihovna má svůj config.neon, takže si myslím, že by to mělo jít nějak jednoduše nawirovat, jen na to nemůžu přijít. V common.neon mám toto:

parameters:
    math:
        functions:
            - sin
            - cos
            - tan
            - cotan
            - log
            - log\d*
            - ln
            - sqrt

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


session:
	expiration: 14 days


services:
	router: App\Router\RouterFactory::createRouter
	math: \Mathematicator\Tokenizer\Tokenizer

README říká, že stačí pouze definovat parametry v neonu, a začít pracovat, ale očividně nestačí.

baraja
Nette Blogger | 29
+
+1
-

@sjiamnocna Ahoj, moc se omlouvám za zmatky v balíku. Vydal jsem ho dřív, než jsem stihl sepsat podrobnou dokumentaci, jak s ním pracovat.

Pro funkčnost Tokenizeru je potřeba nejprve zprovoznit celé jádro Mathematicatoru, které se stará o vnitřní výpočty a logiku, bez kterého se bohužel neobejdeš. Jádro je rozvrstveno mezi více balíky a je potřeba všechny zaregistrovat.

Správná konfigurace je uvedena v každém balíku v souboru config.neon nebo common.neon.

Pro instalaci máš v zásadě 2 možnosti:

  • Projít všechny balíky, získat závislosti a sestavit jeden velký, kde je všechno,
  • Reinstalovat sandbox a místo čistého Nette přidat ještě balík https://github.com/…kage-manager, který ti konfiguraci sám zařídí podle zdrojových balíků.

V repositáři https://github.com/…ore/vikitron je vidět vzorová instalace, která funguje a můžeš ji rovnou používat i ve svém projektu.

Kdyby se ti podařilo vymyslet nějaký způsob, jak napsat dokumentaci tak, aby dávala více smysl, budu moc rád za zpětnou vazbu a podle toho dokumentaci vhodně upravím.

Do projektu jsem si už zadal issue, abych celý proces lépe popsal. Vím, že to je momentálně velmi slabá stránka: https://github.com/…zer/issues/2

Kdyby cokoli, ptej se na libovolné podrobnosti. Je pro mě důležité, aby byla instalace v pořádku.

Díky.

sjiamnocna
Člen | 28
+
+1
-

Skvělé, že ses ozval. :)

Útroby pkg vypadají dobře, stejně jako přislíbená funkcionalita, tak snad to bude funkční.
Mrknu na to zítra, ale od oka hádám, že ani u jednoho postupu prozatím nechápu jak a co.

Až to budu mít v provozu, rád zkusím vymyslet něco k README.

baraja
Nette Blogger | 29
+
0
-

@sjiamnocna Jasně, díky!

Obecný problém balíku je v tom, že se musí zaregistrovat mnoho služeb a pak je volat. Bohužel se to nestane automaticky (zatím), proto to proveď ručně. V ukázkovém projektu VikiTron se podívej, jak instalace proběhla.

Za úpravy README budu rád, ať jde balík příště rozumně použít.

sjiamnocna
Člen | 28
+
0
-

No, tak si s tím už nějakou dobu hraju a uvažuju, jestli nebude jednodušší napsat pro tohle vlastní model a zahrnout jen to, co potřebuju. Nedaří se mi rozchodit ani ten vikitron (naklonovaný z repa).
Pouštím to přes php -s www/ a furt je tam Laděnka.

Díky za snahu

CZechBoY
Člen | 3608
+
+1
-

Co tam máš za Laděnku? Hodila by se aspoň zpráva výjimky.

baraja
Nette Blogger | 29
+
0
-

@sjiamnocna Vlastní model si radši nepiš, pokud chceš používat například funkce pro LaTeX, tak jde o ohromný kus logiky, který se jen tak do nějakého jednoho modelu určitě nevejde… navíc k tomu ještě držet nějakou rozumnou podporu a debugovat.

Co znamená, že se ti to nedaří rozchodit? Jaké chyby to píše? Sandbox VikiTronu je navržený tak, že bys ho měl jenom naklonovat a bude fungovat.

V nouzi zkus zavolat příkaz composer dump, který by měl magicky zkontrolovat závislosti a zavolat přiložený script, který automaticky invaliduje cache a správně nakonfiguruje projekt.

Případně sem hoď texty konkrétních chyb, jinak těžko radit..

Díky.

sjiamnocna
Člen | 28
+
0
-

První je nedůležitý, warning:
Doctrine cache is not available. Application will run slowly!
Please install ApcuCache (function „apcu_cache_info()“) or SQLite3 (function „sqlite_open()“)

Ale už další je error:
Call to undefined function mysqli_init()

Prozatím nechci pracovat s DB, a na lokále ji nechci, ale ani po její instalaci to nezmizelo. Takže další postup bude – nalezení minimální konfigurace. To jest potřebuju zatím jen rozložit výraz, zbytek a LaTeX se bude taky hodit, ale až časem.

Marek Bartoš
Nette Blogger | 1280
+
+2
-

Chybějící funkce znamenají, že ti chybí php extensions, které je přidávají.

baraja
Nette Blogger | 29
+
0
-

@sjiamnocna Jádro se bohužel bez databáze neobejde a ani nevím, jestli takovou konfiguraci chci do budoucna podporovat. Důvod je ten, že se při složitějších výpočtech potřebuje pracovat s cache, ve které se musí sofistikovaně vyhledávat a to nedokážu udělat se souborovou cache, jako je například Nette Cache ani za pomocí tagů a podobně.

Hláška Call to undefined function mysqli_init() je velmi popisná a říká, že nemáš nainstalovanou databázi a její ovladače.

Až DB nainstaluješ, spusť příkaz composer dump a průvodce by tě mi měl aplikaci nakonfigurovat automaticky. Pokud ne, smaž svůj app/config/local.neon a opakuj volání znovu. Teoreticky můžeš mít také něco špatně v tempu, tak ho také promaž.

Pomohlo?

sjiamnocna
Člen | 28
+
+1
-

Aha, ještě, že jsem se zeptal – potřebuju jenom jednoduché výpočty a zpracování, následně je vyplivnout do LaTeXu – bez cache, databáze. Minimálně dočasně pro mě bude lepší na to mít vlastní model. Díky

Trochu bych ti upravil to README, jestli můžu – přidal Use case, Requirements, Konfigurace. Máš e-mail?

baraja
Nette Blogger | 29
+
0
-

@sjiamnocna Maily piš klasicky na jan@barasek.com, já sem potom napíšu souhrn pro ostatní diskutující v budoucnu.

Dává mi smysl balík spíše opravit a více zpřístupnit, než abys musel psát svůj model.

Ono zpracování matematických výrazů je totiž extrémně složitý problém. Už jenom třeba součet dvou zlomků a vypsání do LaTeXu je velmi náročné, pokud chceš ošetřit všechny situace. A teď si představ, že někdo přidá závorky, zanořené podvýrazy, … zkrátka uvidíš sám. :)