Nastavení DI v Neonu pro plugin z Composeru
 
- sjiamnocna
- Člen | 28
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).
- Zřejmě jsem netrefil namespace, takže jaké namespace používat
	v případě pluginu z Composeru?
		Mathematicator\Tokenizer\Tokenizernejde, částečně i proto, že jej Nette hledá podApp\Presenters\což asi fungovat nebude. PHPStorm mi ale normálně referenci najde.Díky Bohu (a Davidovi) za Laděnku!!! :) 
- 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;
  }
?>
- 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 | 1313
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 __constructne 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
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
@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
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
@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
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
 
- baraja
- Nette Blogger | 29
@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
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 | 1313
Chybějící funkce znamenají, že ti chybí php extensions, které je přidávají.
 
- baraja
- Nette Blogger | 29
@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
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
@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. :)
