Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

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

Pagina: 1
Acties:

Vraag


  • Essie689
  • Registratie: januari 2011
  • Laatst online: 22:26
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: 04-06 16:03
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
  • Laatst online: 16-06 18:51
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: 00:05

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.



Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 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 - 2021 Hosting door True