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\Tokenizer
nejde, čá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 | 1280
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\Tokenize
r 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
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 | 1280
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. :)