名前がのモジュールを作成しました。zend 3のコマースが正常に動作しています。私は__construct()
を通じて依存関係を注入するとき今では /var/www/htmlと設定/ ZF3 /ベンダー/ zendframeworkに渡されたエラーzf3 __construct()が動作しません
少なすぎ コマース\コントローラ\ IndexControllerを関数の引数:: __構築物()、0を投げますライン30上の/zend-servicemanager/src/Factory/InvokableFactory.php と正確に1ここ
予想制御コードです。
<?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
コード
<?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',
],
],
];
問題がありますか? zend-di
は既にインストールされています。
それが働いていますが、私は2でそれらを定義する必要があるため、それは多くの作業のように見えます場所(コントローラとmodule.config.phpファイルの両方)。コントローラーでのみ定義しなければならない方法はありますか? – amitshree
はい、あります。 "\ Commerce \ Model \ Commerce"のファクトリを定義するのをスキップすることができます。コントローラファクトリで作成するだけです:new Controller \ IndexController(new \ Commerce \ Model \ Commerce($ dependencies)); –
この代替案を例として回答に追加できますか? – amitshree