In een project waar ik 2 applicaties geinstalleerd hebt wordt door het eerste project soms de verkeerde doctrine ingeladen.
Het is een TYPO3 CMS installatie in de root met een composer.json en een Laravel installatie in een submap, met een eigen composer.json.
Webroot
- composer.json
- vendor\ (typo3 installatie)
- \typo3conf\ext\subapp\laravel\composer.json
- \typo3conf\ext\subapp\laravel\vendor\ (laravel installatie)
In beide projecten wordt Doctrine gebruikt, alleen in de TYPO3 installatie is dat een andere versie dan in de Laravel applicatie.
Probleem zit hem er nu in dat als je in de TYPO3 site een record opslaat, hij deze melding geeft:
Call to undefined method TYPO3\CMS\Core\Database\Connection::fetchAllAssociative()
Na diep debuggen kom ik erachter dat het komt omdat hij in de Laravel doctrine installatie uitkomt:
\typo3conf\ext\subapp\laravel\vendor\doctrine\dbal\lib\Doctrine\DBAL\Schema\AbstractSchemaManager.php
en daar wordt (in listTableColumns) de method fetchAllAssociative aangeroepen, maar de TYPO3 doctrine versie heeft die method nog niet.
Hij had dus eigenlijk hier terecht moeten komen:
\vendor\doctrine\dbal\lib\Doctrine\DBAL\Schema\AbstractSchemaManager.php
want deze versie gebruikt de fetchAllAssociative niet (maar fetchAll).
Als ik tijdelijk de vendor map van laravel weghaal, werkt het gewoon prima. Het lijkt dus echt mis te gaan met het autoloaden.
Is er een manier om in de composer.json aan te geven dat hij specifiek de Doctrine versie in zijn eigen vendor map moet gebruiken?
Handmatig:
"Doctrine\\DBAL\\": "vendor/doctrine/dbal/lib/Doctrine/DBAL",
toevoegen aan het PSR-4 autoload gedeelte in de composer.json van de TYPO3 installatie lijkt niet te werken?
De 2 applicaties samenvoegen in 1 composer.json is helaas geen optie, het moeten echt gescheiden applicaties blijven.
Iemand een idee?
Het is een TYPO3 CMS installatie in de root met een composer.json en een Laravel installatie in een submap, met een eigen composer.json.
Webroot
- composer.json
- vendor\ (typo3 installatie)
- \typo3conf\ext\subapp\laravel\composer.json
- \typo3conf\ext\subapp\laravel\vendor\ (laravel installatie)
In beide projecten wordt Doctrine gebruikt, alleen in de TYPO3 installatie is dat een andere versie dan in de Laravel applicatie.
Probleem zit hem er nu in dat als je in de TYPO3 site een record opslaat, hij deze melding geeft:
Call to undefined method TYPO3\CMS\Core\Database\Connection::fetchAllAssociative()
Na diep debuggen kom ik erachter dat het komt omdat hij in de Laravel doctrine installatie uitkomt:
\typo3conf\ext\subapp\laravel\vendor\doctrine\dbal\lib\Doctrine\DBAL\Schema\AbstractSchemaManager.php
en daar wordt (in listTableColumns) de method fetchAllAssociative aangeroepen, maar de TYPO3 doctrine versie heeft die method nog niet.
Hij had dus eigenlijk hier terecht moeten komen:
\vendor\doctrine\dbal\lib\Doctrine\DBAL\Schema\AbstractSchemaManager.php
want deze versie gebruikt de fetchAllAssociative niet (maar fetchAll).
Als ik tijdelijk de vendor map van laravel weghaal, werkt het gewoon prima. Het lijkt dus echt mis te gaan met het autoloaden.
Is er een manier om in de composer.json aan te geven dat hij specifiek de Doctrine versie in zijn eigen vendor map moet gebruiken?
Handmatig:
"Doctrine\\DBAL\\": "vendor/doctrine/dbal/lib/Doctrine/DBAL",
toevoegen aan het PSR-4 autoload gedeelte in de composer.json van de TYPO3 installatie lijkt niet te werken?
De 2 applicaties samenvoegen in 1 composer.json is helaas geen optie, het moeten echt gescheiden applicaties blijven.
Iemand een idee?