2017-11-17 4 views
0

コントローラ工場を介してコントローラに依存関係を注入しようとしています。それが言う私のmodule.config.phpファイルがZend framework 3:コントローラに引数を渡す

<?php 

namespace Commerce; 

use Commerce\Controller\Plugin\Website; 
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', 
        ], 
       ], 
      ], 
      'getFilters' => [ 
       'type' => Segment::class, 
       'options' => [ 
        'route' => '/api/getFilters', 
        'defaults' => [ 
         'controller' => Controller\Api\SearchController::class, 
         'action' => 'getFilters' 
        ] 
       ] 
      ], 
    'controllers' => [ 
     'factories' => [ 
Controller\Api\SearchController::class => function ($container) { 
       return new Controller\Api\SearchController(
       $container->get("first"), 
        $container->get("second") 
       ); 
      }, 
      Controller\IndexController::class => function ($container) { 
       return new Controller\IndexController(); 
      }, 
      Controller\Api\SearchController::class => InvokableFactory::class 
     ] 
     ] 
// view_manager code 

が含まれており、上記のコード実行中にコントローラファイルコントローラー\アピ\ SearchControllerは

<?php 

namespace Commerce\Controller\Api; 
class SearchController extends \Zend\Mvc\Controller\AbstractRestfulController 
{ 

    public function __construct($a, $b) 
    { 
     $this->a = $a; 
     $this->b = $b; 
    } 
    public function getFiltersAction() 
    { 
     // some code 
    } 
} 

Module.phpコード

<?php 

namespace Commerce; 

use Base\ModuleManager\Feature\ConfigProviderInterface; 

use Zend\Mvc\MvcEvent; use Zend\Session\SessionManager; 

class Module implements ConfigProviderInterface { 
    public function getConfig() 
    { 
     return include __DIR__ . '/../config/module.config.php'; 
    } 

    /** 
    * This method is called once the MVC bootstrapping is complete. 
    */ 
    public function onBootstrap(MvcEvent $event) 
    { 
     $application = $event->getApplication(); 
     $serviceManager = $application->getServiceManager(); 

     // The following line instantiates the SessionManager and automatically 
     // makes the SessionManager the 'default' one. 
     $sessionManager = $serviceManager->get(SessionManager::class); 
    } 
} 

が含まれています

/var/www/html/zf3/vendor/zendframework/zend-servicemanager/src/Factory/InvokableFactory.php に渡さ コマース\コントローラ\アピ\ SearchControllerを機能させる

引数が少なすぎます:: __構築物()、0 30行目と正確に2が予想される

私はここで何が間違っていますか?コントローラにパラメータ/値の依存関係を注入する最良の方法は何ですか?

+0

を使用していたあなたのコントローラー工場設定は無視されているように見えます。あなたはmodule.config.php全体を投稿できますか?また、何か問題がある場合に備えて、Module.phpコードを追加してください。 –

+0

@JannesBotisコードを更新しました。親切にチェックしてください。一旦 'Controller \ Api \ SearchController :: class => InvokableFactory :: class'行を削除すると、サービスを"最初に "工場に解決する_Unableと表示されます。あなたが構成中にそれを提供したことは確かですか? – amitshree

答えて

0

私はそれを働かせました。 module.config.phpファイルではなく、

'controllers' => [ 
     'factories' => [ 
Controller\Api\SearchController::class => function ($container) { 
       return new Controller\Api\SearchController(
       $container->get("first"), 
        $container->get("second") 
       ); 
      }, 
] 
] 

を使用して、私は

'controllers' => [ 
     'factories' => [ 
Controller\Api\SearchController::class => function ($container) { 
       return new Controller\Api\SearchController(
       "first", 
       "second" 
       ); 
      }, 
] 
] 
関連する問題