Toon posts:

Probleempje met PHP (of Symfony?) met Namespace en Namespace

Pagina: 1
Acties:

Vraag


  • Essie689
  • Registratie: Januari 2011
  • Laatst online: 23-09 22:53
Ik probeer momenteel de code van een project op te delen in packages, zodat ik deze logica kan hergebruiken in andere projecten.

Nu ging dat best goed totdat ik zaken uit dezelfde namespace wilde opdelen over twee verschillende packages (1 met alle domein logica en andere met extra implementaties die afhankelijk zijn van external depencies en optioneel zijn) . Het ondestaande voorbeeld is een versimpeling van wat ik probeer te realiseren.

Bij symfony heb ik in mijn services.yaml het volgende staan voor autowiring.
code:
1
2
3
4
5
6
7
    test.space:
        namespace: MyTest\Space\
        resource: '[b]../vendor/mytest/space/src/*[/b]'

    test.space.stars:
        namespace: MyTest\Space\
        resource: '[b]../vendor/mytest/space-plugin-stars/src/*[/b]'


Inhoud: ../vendor/mytest/space/src/
\Galaxy (folder)
- GalaxyAInterface.php (namespace MyTest\Space\Galaxy)
- GalaxyBInterface.php (namespace MyTest\Space\Galaxy)
(en nog veel meer mappen en bestanden)

Inhoud ../vendor/mytest/space-plugin-stars/src/
\Galaxy (folder)
- StarsGalaxyA.php (namespace MyTest\Space\Galaxy) > implementeerd GalaxyAInterface
- StarsGalaxyB.php (namespace MyTest\Space\Galaxy) > implementeerd GalaxyBInterface
(en nog veel meer mappen en bestanden).

De foutmelding die ik vanuit Symfony nu krijg is dat hij de bestanden in de verkeerde directory zoekt (en dus aangeeft dat ze niet bestaan)..

De simpele oplossing zou zijn dat ik de namespace van de space-plugin-stars verander. Maar ik vraag me af of het echt niet my de service.yaml op een andere manier is op te lossen?

[edit] In plain php (zonder symfony) werkt het gewoon zonder problemen.. Het gaat dus echt mis met het autowiren in symfony.

[Voor 3% gewijzigd door Essie689 op 01-07-2020 22:12]

Alle reacties


  • bobdetweaker
  • Registratie: Maart 2015
  • Laatst online: 26-09 17:17
Heb je de cache geleegd van je Symfony applicatie?

code:
1
php bin/console cache:pool:clear cache.global_clearer


Als je bestanden verplaatst hebt en je gebruikt composer, zorg er dan voor dat je bestanden gevonden kunnen worden middels de composer autoloader (PSR-4).

  • Freeaqingme
  • Registratie: April 2006
  • Nu online
Kijk voor de grap even naar de gegenereerde autoloader map. Ik denk niet dat je autoloader-technisch 1 namespace aan twee directories kan koppelen. Is eventueel wel op te lossen met een custom autoloader.

Echter, waarom wil je het per se in dezelfde namespace stoppen? Waarom die tweede niet - bijvoorbeeld - in MyTest\Space\Plugin\Stars zetten? Dan kan je met een 'use' statement alsnog de interface uit MyTest\Space implementeren.

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 04-10 21:22

NMe

Quia Ego Sic Dico.

Waarom heb je er "gewone" packages van gemaakt? Als je er bundles van maakt kun je gewoon je serviceconfiguratie ín de package kwijt. Dan heb je ook gewoon een Essie689\JouwBundleNaam-namespace waarbinnen je andere namespaces vallen en composer regelt het vanaf daar wel.

Dat gezegd hebbende: aparte package = aparte namespace. Als je ze in dezelfde namespace wil hebben horen ze in dezelfde package of bundle.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.




Google Pixel 7 Sony WH-1000XM5 Apple iPhone 14 Samsung Galaxy Watch5, 44mm Sonic Frontiers Samsung Galaxy Z Fold4 Insta360 X3 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2022 Hosting door True

Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee