si un expert Symfony passe dans les parages, j'ai un soucis qui me bloque depuis pas mal de temps.
Je m'auto-forme à Symfony depuis environ trois mois et je tâche de me construire un système sur la base de symfony mais en écartant deux éléments qui me sortent par les yeux, à savoir Doctrine et Twig.
Et pour l'instant ça fonctionne ... à un détail près. Le système d'injection de dépendances ne fonctionne pas du tout. Je fouille Internet depuis des semaines sans trouver ce que je cherche.
L'Environnement :
- Linux/Ubuntu;
- Apache 2.4
- PHP 8.1;
- Packages de Symfony en version 6.3;
Le blocage :
j'ai un contrôleur dans lequel j'ai ajouté un constructeur afin d' injecter trois services :
Code : Tout sélectionner
public function __construct(FormFactory $oFormFactory, DbrmFactory $oDbrm, RequestStack $RequestStack)
{
$this->_oFormFactory = $oFormFactory;
$this->_oDbrm = $oDbrm;
$this->_oPrm = new ParametresReferentiel($oDbrm);
$this->_oUtl = new UtilisateurReferentiel($oDbrm);
$this->_AuthenticationUtils = new AuthenticationUtils($RequestStack);
}
J'ai bien évidemment vérifié les services dans le fichier services.yaml, Et j'ai pourtant bien indiqué les éléments voulus :Too few arguments to function App\Controleur\IdentificationController::__construct(), 0 passed in /var/www/Clients/merp/vendor/symfony/http-kernel/Controller/ControllerResolver.php on line 131 and exactly 3 expected
Code : Tout sélectionner
services
. . .
app.fabrique.form:
class: App\Fabrique\FormFactory:
autowire: true
app.fabrique.dbrm:
class: App\Fabrique\DbrmFactory:
autowire: true
App\Controleur\IdentificationController:
arguments:
$oFormFactory: '@app.fabrique.form'
$oDbrm: '@app.fabrique.dbrm'
$RequestStack: '@Symfony\Component\HttpFoundation\RequestStack'
autowire: true
Code : Tout sélectionner
$ php bin/console debug:autowiring fabrique --all
Autowirable Types
=================
The following classes & interfaces can be used as type-hints when autowiring:
(only showing classes/interfaces matching fabrique)
Gestion de l'accès aux données : fabrique pour l'utilisation du package jemdev\dbrm
App\Fabrique\DbrmFactory
Création de formulaires avec le package jemdev\form
App\Fabrique\FormFactory
Pro-tip: use interfaces in your type-hints instead of classes to benefit from the dependency inversion principle.
Code : Tout sélectionner
$ php bin/console debug:container
Symfony Container Services
==========================
-------------------------------------------------------------------------- ----------------------------------------------------------------------------------------
Service ID Class name
-------------------------------------------------------------------------- ----------------------------------------------------------------------------------------
. . . ..
App\Fabrique\DbrmFactory App\Fabrique\DbrmFactory
App\Fabrique\FormFactory App\Fabrique\FormFactory
. . . .
-------------------------------------------------------------------------- ----------------------------------------------------------------------------------------
// To search for a specific service, re-run this command with a search term. (e.g. debug:container log)
Code : Tout sélectionner
$ php bin/console debug:container fabrique
Select one of the following services to display its information:
[0] App\Fabrique\DbrmFactory
[1] App\Fabrique\FormFactory
[2] app.fabrique.form
[3] app.fabrique.dbrm
> 2
Information for Service "app.fabrique.form"
===========================================
---------------- -----------------------------------------
Option Value
---------------- -----------------------------------------
Service ID app.fabrique.form
Class App\Fabrique\FormFactory:
Tags -
Public no
Synthetic no
Lazy no
Shared yes
Abstract no
Autowired yes
Autoconfigured yes
Usages App\Controleur\IdentificationController
---------------- -----------------------------------------
! [NOTE] The "app.fabrique.form" service or alias has been removed or inlined when the container was compiled.
PS : ça fait très longtemps que je n'avais pas posté, je n'arrive pas à maintenir l'indentation dans le code, désolé, ça le rend nettement moins lisible.