質問

マゼント2オブジェクトマネージャと依存関係の注入を把握していると思うときは、理解できないものが発生します。context EN pagefactoryオブジェクトを渡すと思いますが、Magentoはそうではないと言っています。2番目のものは間違っているようです。

Recoverable Error: Argument 2 passed to Demo\Hello\Controller\Adminhtml\Order\MassPrint::__construct() must be an instance of Magento\Framework\View\Result\PageFactory, instance of Magento\Framework\App\ResourceConnection given, called in 
.

コントローラ:

<?php 
namespace Demo\Hello\Controller\Adminhtml\Order;

use Magento\Backend\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;

class MassPrint extends \Magento\Backend\App\Action {

  public function __construct(Context $context, PageFactory $pageFactory) {
    parent::__construct($context);
  }

}
.

私が欲しいようなヒントを理解しています:

must be an instance of Magento\Framework\View\Result\PageFactory
.

しかしそれは

を渡します
instance of Magento\Framework\App\ResourceConnection given
.

これはなぜですか?私が理解していないマゼントと何らかの魔法があります(まだ)。

役に立ちましたか?

解決

tl; dr

Interceptor.phpでエラーが発生した場合は、さらに見る前に常に/var/generation/を空にしてください。それはあなたにたくさんの時間を節約します。

説明

テストの後、私は基礎となる原因を見つけました。初めてMagentoが自動的にファイルを生成するためにカスタムコントローラを実行するとき。ここまでは順調ですね。私の場合は1つだけです。それはvar\generation\に住んでいますこの例のフルパスはvar\generation\Demo\Hello\Controller\Adminhtml\Order\MassPrint\Interceptor.phpです。

このクラスはカスタムコントローラを拡張しています。それでは、当然のことながら、それはそれ自身のコンサルケーションで親コンサルケーションを呼び出しています。そのため、コントローラコンストラクターを変更した場合、このファイルはあなたの新しいコードMachに再生成されなければなりません。そうでない場合は、不要な結果が得られます。それでは、少なくともそのコントローラのインターセプタクラスを削除してください。 Magentoはあなたの新しいコードに一致するすべてのファイルを再生成するようにディレクター全体を空にすることになります。

rm -rf var/generation/*
.

実際にMagentoは、エラーメッセージの最後の部分を調べるための非常に良い手がかりを与えます。

called in /var/generation/Demo/Hello/Controller/Adminhtml/Order/MassPrint/Interceptor.php on line 15
.

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top