Komentáře k článku
Symfony po krůčkách – Filesystem a Finder

V dnešním článku si ukážeme, jak v Symfony za pomocí komponent Filesystem a Finder pracovat se soubory. Projdeme si jednotlivé funkce a vše si vyzkoušíme na jednoduchém projektu.
V dnešním článku si ukážeme, jak v Symfony za pomocí komponent Filesystem a Finder pracovat se soubory. Projdeme si jednotlivé funkce a vše si vyzkoušíme na jednoduchém projektu.
Stavovost Finderu
Věřím, že obě komponenty jsou fajn, ale před pár dny mě celkem zklamal Finder a jeho „stavovost“. Pro každé nové hledání byste ideálně měli založit novou instanci, nelze ho tedy použít jako servisu v DI kontejneru.
Pokud víckrát za sebou zavolám a proiteruju
foreach ($finder->files()->name('*.php')->in($realpath)
na různých adresářích, tak si Finder pamatuje soubory z toho předchozího hledání a vrátí je i při procházení dalších.Re: Stavovost Finderu
Zrovna tady bych to bral jako žádoucí. Pokud pracuji třeba s Guzzlem taky si pro každý request nastavuji
new Client()
Nicméně jde to – pokud si v services nastavíš
scope: prototype
bude pokaždé předána nová instanceRe: Stavovost Finderu
Jen pozor, od Symfony 2.8 se to definuje jen jako
shared: false
(a každé get nad DIC vrátí novou instanci), scope bylo v Symfony 3.0 tuším odstraněno.https://symfony.com/doc/current/cookbook/service_container/shared.html
Re: Stavovost Finderu
Vidíš to jsem přehlídl. Díky!
Re: Stavovost Finderu
Honzo, nevidím důvod, proč nemít třídu Client z Guzzle jako službu. Pokud chceme dělat v DI, tak bychom přeci „new“ měli používat jen u přepravek a entit. Nikdy u tříd, co poskytují větší funkcionalitu.
Co když budeš chtít najednou všude v aplikaci do třídy Client přidat nějaké nové nastavení/závislosti?
Jinak souhlasím s Ondrou Mirtesem, že stavovost Finderu je prasárna. Využitím shared: false v definici služby jen zachraňujeme situaci, kdy Finder vývojáři Symfony napsali blbě. Vznikne nám tak automatická továrna na objekty typu Finder.
Pokaždé když použijeme továrnu na vytvoření objektu s nějakou větší funkcionalitou (tedy ne přepravky nebo entity), tak jsme selhali v tom, abychom dělali správné DI. Vždy je z toho udělat bezstavová služba, se kterou se dlouhodobě pracuje mnohem lépe a je to mnohem více bullet-proof řešení.
Re: Stavovost Finderu
Aha, rozumim tomu spravne ze podle vas a podle „spravneho DI“ nema zadna trida drzet zadny stav? Nemuzu si pomoct ale slovy klasika mi prijde Vas nazor zaostaly.
Re: Stavovost Finderu
Tak si dej do DI factory.
No doprčic, v Symfony už píšu léta ale filesystem s lockama mi tak nějak uniklo. Díky!