J'ai créé un module avec le nom Commerce dans zend 3 qui fonctionne très bien. Maintenant, quand j'injecte une dépendance par __construct()
il jette une erreurZF3 __construct() ne fonctionne pas
Trop peu d'arguments pour fonctionner Commerce \ Controller \ IndexController :: __ construct(), 0 passé dans /var/www/html/ZF3/fournisseur/zendframework /zend-servicemanager/src/Factory/InvokableFactory.php en ligne 30 et exactement 1 devrait
Voici le code du contrôleur.
<?php
namespace Commerce\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Commerce\Model\Commerce;
class IndexController extends AbstractActionController
{
private $commerce;
/**
* IndexController constructor.
* @param Commerce $commerce
*/
public function __construct(Commerce $commerce)
{
$this->commerceModel = $commerce;
}
public function indexAction()
{
return new ViewModel();
}
}
module.config.php
Code
<?php
namespace Commerce;
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;
use Zend\ServiceManager\Factory\InvokableFactory;
return [
'router' => [
'routes' => [
'home' => [
'type' => Literal::class,
'options' => [
'route' => '/',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
],
],
'commerce' => [
'type' => Segment::class,
'options' => [
'route' => '/commerce[/:action][/:id]',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
],
],
],
],
'controllers' => [
'factories' => [
Controller\IndexController::class => InvokableFactory::class
],
],
'view_manager' => [
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => [
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
'commerce/index/index' => __DIR__ . '/../view/commerce/index/index.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
],
'template_path_stack' => [
__DIR__ . '/../view',
],
],
];
Où est le problème? zend-di
est déjà installé.
Il fonctionne, mais il semble que beaucoup de travail parce que je dois les définir à 2 places (à la fois dans le fichier controller et le fichier module.config.php). Y a-t-il un moyen par lequel je dois les définir dans le contrôleur seulement? – amitshree
Oui, il y a. Vous pouvez ignorer la définition d'une fabrique pour "\ Commerce \ Modèle \ Commerce", il suffit de la créer dans la fabrique de contrôleurs: return new Controller \ IndexController (nouveau \ Commerce \ Modèle \ Commerce ($ dépendances)); –
Pouvez-vous s'il vous plaît ajouter cette alternative dans votre réponse avec un exemple? – amitshree