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

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Essie689
  • Registratie: Januari 2011
  • Laatst online: 23-09-2022
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: 02-06 10:54
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-07 15:03

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.