AurelienW Posted Friday at 08:27 AM Share Posted Friday at 08:27 AM Bonjour à tous ! Je suis entrain de créer un module et j'ai un problème d'autowiring pour ajouter toutes mes class au conteneur symfony. Voici la structure de mon module : menuiserieconfigurator/ ├── config/ │ └── admin/ │ ├── routes.yml │ └── services.yml ├── src/ │ ├── Controller/ │ │ └── Admin/ │ │ └── ProductSvgController.php │ ├── Form/ │ │ └── SvgUploadType.php │ ├── Repository/ │ │ └── SvgRepository.php │ └── Service/ │ ├── SvgSanitizer.php │ ├── SvgService.php │ └── SvgStorage.php ├── vendor/ │ ├── composer/ │ ├── .htaccess │ └── autoload.php ├── views/ │ └── templates/ │ └── hook/ │ └── product_form.html.twig ├── composer.json ├── composer.lock ├── config_fr.xml ├── index.php └── menuiserieconfigurator.php Voici mon services.yml : services: _defaults: autowire: true autoconfigure: true MenuiserieConfigurator\: resource: '../../src/' exclude: - '../../src/DependencyInjection/' - '../../src/Entity/' - '../../src/Kernel.php' Mon composer.json : { "name": "aurelien/menuiserieconfigurator", "type": "prestashop-module", "autoload": { "psr-4": { "MenuiserieConfigurator\\": "src/" } }, "config": { "preferred-install": "dist", "prepend-autoloader": false } } Voici le début de mon ProductController.php : <?php namespace MenuiserieConfigurator\Controller\Admin; use MenuiserieConfigurator\Form\SvgUploadType; use MenuiserieConfigurator\Service\SvgService; use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class ProductSvgController extends FrameworkBundleAdminController { À savoir que tous les namespaces et le nom des classes sont les bons dans tous les fichiers, j'ai tout vérifié. Quand je lance la commande php bin/console debug:autowiring j'ai l'erreur suivante : The definition for "MenuiserieConfigurator\Controller\Admin\ProductSvgController" has no class attribute, and appears to reference a class or interface in the global namespace. Leaving out the "class" attribute is only a llowed for namespaced classes. Please specify the class attribute explicitly to get rid of this error. Je ne comprend pas pourquoi l'autowiring ne fonctionne pas alors que prestashop 8.0.2 tourne sous 4.4.. J'ai bien lancé composer dump-autoload, vidé le cache prestashop plusieurs fois etc.. Si quelqu'un a une idée, merci ! Link to comment Share on other sites More sharing options...
wepresta Posted 4 hours ago Share Posted 4 hours ago Bonjour, L’erreur vient presque toujours du services.yml qui n’est pas chargé (ou pas celui que vous pensez), du coup Symfony lit une définition “bancale” du contrôleur sans class. À vérifier / corriger côté module PrestaShop 8 : Assurez-vous que votre fichier est bien au bon endroit et chargé Par convention PS8 : config/services.yml (pas uniquement config/admin/services.yml), ou alors il faut que votre extension le charge explicitement. Le plus simple : mettez votre config dans config/services.yml et retestez. Dans services.yml, essayez aussi un mapping explicite du contrôleur (pour valider que le fichier est bien pris en compte) : Déclarez le contrôleur directement en service (au moins pour test). Si ça marche, votre resource n’était pas appliqué. Vérifiez que votre contrôleur est bien dans le “scope” scanné : Votre namespace est MenuiserieConfigurator\Controller\Admin Votre resource est ../../src/ → OK si le fichier est effectivement chargé. En bref : ce n’est pas un problème de Symfony 4.4, mais un problème de chargement du fichier services.yml côté PrestaShop/module. Déplacez-le en config/services.yml (ou assurez le chargement), et l’autowiring devrait repartir. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now