タグ付けされた質問 「di」

Magento 2の依存関係注入に関する質問を示します。

4
Magento 2:「setup:di:compile」を実行する**特定のモジュールのみ?
特定のモジュールのコードを事前生成することはできますか?IE- システムですべてのコードを生成できます php bin/magento setup:di:compile ただし、これには時間がかかる場合があります。特定のモジュールのファイルのみを事前生成したいのですが。 php bin/magento setup:di:compile Pulsestorm_Commercebug 私が解決しようとしている特定の問題は、開発者/デフォルトモードで認識されない一部のプラグインでこの問題を回避することです。
33 php  magento2  di 

2
Magento 2:$ data配列コンストラクターパラメーターとは何ですか?
そのため、ほとんどのモデルとブロックでは、コンストラクターの最後のパラメーターとしてこれがarray $data = []指定されていることに気付きました。 例えば \Magento\Catalog\Block\Product\ListProduct public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\Data\Helper\PostHelper $postDataHelper, \Magento\Catalog\Model\Layer\Resolver $layerResolver, CategoryRepositoryInterface $categoryRepository, \Magento\Framework\Url\Helper\Data $urlHelper, array $data = [] ) { $this->_catalogLayer = $layerResolver->get(); $this->_postDataHelper = $postDataHelper; $this->categoryRepository = $categoryRepository; $this->urlHelper = $urlHelper; parent::__construct( $context, $data ); } また、好みを扱うとき、あなたは とき、元のコンストラクターよりも多くのパラメーターを追加する場合、そのパラメーターをコンストラクターパラメーターリストの最後に保持する必要があるいます。 したがって、この配列に関していくつかの質問があります: それは何ですか ? それの使い方 ? パラメータを追加するブロックの設定を宣言するときに、コンストラクタパラメータリストの最後に保持する必要があるのはなぜですか?

2
Magento2のxmlで許可されるすべての `xsi:type`値は何ですか
Magento 2(ほとんど)では、xmlファイルにリストされているすべての引数にxsi:typeは、引数の値がどのように解釈されるかを決定する属性があります。 たとえばdi.xml、バックエンドモジュールのファイルには以下があります。 <argument name="scopeType" xsi:type="const">Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT</argument> これは、引数scopeTypeの値が定数の値であることを意味しますMagento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT またはこれ <argument name="template" xsi:type="string">Magento_Theme::root.phtml</argument> これは、引数の値がtemplate文字列であることを意味しますMagento_Theme::root.phtml。 このxsi:type属性のすべての可能な値は何ですか?
20 magento2  xml  di 

4
Magento 2:プロキシクラスとは何かの実用的な説明
だから、Magento 2のプロキシクラスとは理論的には知っています。それについての素晴らしいAlan Stormの記事を読み、それらのクラスがどのように生成されるかを完全に理解しています。 しかし、それは私が英語を母国語としないからなのか、アランの説明が非常に抽象的な非コアクラスを使用しているのかわからないが、それがどのように機能するのか、特に使用するタイミングを理解するのに苦労している開発中。 それでは、次のコアからこの例を見てみましょうapp/code/Magento/GoogleAdwords/etc/di.xml。 <?xml version="1.0"?> <!-- /** * Copyright © 2016 Magento. All rights reserved. * See COPYING.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\GoogleAdwords\Observer\SetConversionValueObserver"> <arguments> <argument name="collection" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Collection\Proxy</argument> </arguments> </type> </config> 私が知りたいのですが: なぜ特定のケースでプロキシクラスが使用されるのですか? 一般に、プロキシクラスを使用する必要がある場合

2
Magento 2:ステートメントを使用するか、直接クラスパスを使用しますか?
私はポイントを逃しているかもしれませんが、なぜ特定のクラスに「使用」ステートメントがあるのか​​、時にはないのか疑問に思っています。 例:app\code\Magento\Email\Model\Template.php、ファイルの先頭にあります: namespace Magento\Email\Model; use Magento\Store\Model\ScopeInterface; use Magento\Store\Model\StoreManagerInterface; 次に、__constructメソッドには次のパラメーターがあります。 public function __construct( \Magento\Framework\Model\Context $context, \Magento\Framework\View\DesignInterface $design, \Magento\Framework\Registry $registry, \Magento\Store\Model\App\Emulation $appEmulation, StoreManagerInterface $storeManager, \Magento\Framework\View\Asset\Repository $assetRepo, \Magento\Framework\Filesystem $filesystem, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Email\Model\Template\Config $emailConfig, \Magento\Email\Model\TemplateFactory $templateFactory, \Magento\Framework\Filter\FilterManager $filterManager, \Magento\Framework\UrlInterface $urlModel, \Magento\Email\Model\Template\FilterFactory $filterFactory, array $data = [] ) したがってuse Magento\Store\Model\StoreManagerInterface;、クラスの先頭で呼び出したときStoreManagerInterface $storeManagerに、コンストラクターパラメーターで実行できることが明確にわかります。 私の質問は: なぜ1つのクラスだけでこれを行うのですか? useコンストラクターのすべてのクラスにステートメントを追加して、完全なクラスパスを入力する必要がないのはなぜですか? または、逆に、useステートメントを削除してStoreManagerInterfaceクラスへのフルパスを入力してみませんか?


2
一部のクラスがコンストラクタとdi.xmlの両方で注入を定義するのはなぜですか?
一部のクラスで、依存関係の注入が2回宣言されている理由がわかりません。1回目di.xmlは、具体的なクラスのコンストラクターで宣言されています。 でたとえばMagento\Backend\Model\Url、そのは、di.xmlDIのためのタイプのこのセットが定義されています: <type name="Magento\Backend\Model\Url"> <arguments> <argument name="scopeResolver" xsi:type="object"> Magento\Backend\Model\Url\ScopeResolver</argument> <argument name="authSession" xsi:type="object"> Magento\Backend\Model\Auth\Session\Proxy</argument> <argument name="formKey" xsi:type="object"> Magento\Framework\Data\Form\FormKey\Proxy</argument> <argument name="scopeType" xsi:type="const"> Magento\Store\Model\ScopeInterface::SCOPE_STORE </argument> <argument name="backendHelper" xsi:type="object"> Magento\Backend\Helper\Data\Proxy</argument> </arguments> </type> しかし、同時に、その具象クラスでは、注入に必要なdi.xmlで定義されたクラスがコンストラクターで再度宣言されます。 <?php public function __construct( \Magento\Framework\App\Route\ConfigInterface $routeConfig, \Magento\Framework\App\RequestInterface $request, \Magento\Framework\Url\SecurityInfoInterface $urlSecurityInfo, \Magento\Framework\Url\ScopeResolverInterface $scopeResolver, \Magento\Framework\Session\Generic $session, \Magento\Framework\Session\SidResolverInterface $sidResolver, \Magento\Framework\Url\RouteParamsResolverFactory $routeParamsResolverFactory, \Magento\Framework\Url\QueryParamsResolverInterface $queryParamsResolver, \Magento\Framework\App\Config\ScopeConfigInterface …

1
di.xmlで<preference>を動的に有効/無効にする方法は?
現在&lt;preference/&gt;、di.xmlファイルの1つに次のものが含まれています。 &lt;preference for="Magento\Contact\Controller\Index\Post" type="RadTest\TestModule\Controller\Contact\Post" /&gt; 管理パネルにモジュールの有効化/無効化設定オプションがあります。&lt;preference&gt;カスタム構成オプションが有効に設定されている場合にのみを有効にしたい。 &lt;preference/&gt;モジュールの設定に応じてオーバーライドを動的に有効または無効にするにはどうすればよいですか?

1
http動詞インターフェースの目的
Magento 2.3では、すべてのhttp動詞用のインターフェースがいくつかあります Magento\Framework\App\Action\HttpPostActionInterface Magento\Framework\App\Action\HttpGetActionInterface、 ... それらはすべて空で実装されていMagento\Framework\App\ActionInterfaceます。 また、それらすべてがapp/etc/di.xmlのパラメーターにマップされてMagento\Framework\App\Request\HttpMethodMapおり、多くのコントローラーがこれらのインターフェースを実装していることもわかりました。 しかし、すべてのコントローラではありません。 それについて私が見つけることができたすべてです。 彼らの目的は何ですか?

2
di.xml定数型とinit_parameter
di.xmlコアのファイルを見ると、一部の引数には型init_parameterがありますが、パラメーターの値はすべて定数です。 &lt;type name="Magento\Framework\View\Page\Config\Renderer"&gt; &lt;arguments&gt; &lt;argument name="appMode" xsi:type="init_parameter"&gt;Magento\Framework\App\State::PARAM_MODE&lt;/argument&gt; &lt;/arguments&gt; &lt;/type&gt; またはこれ &lt;type name="Magento\Framework\App\Cache\State"&gt; &lt;arguments&gt; &lt;argument name="banAll" xsi:type="init_parameter"&gt;Magento\Framework\App\Cache\State::PARAM_BAN_CACHE&lt;/argument&gt; &lt;/arguments&gt; &lt;/type&gt; その他多数。 しかし、に関連付けられたインタープリターで見たものからinit_parameter、定数インタープリターが使用されますMagento\Framework\App\Arguments\ArgumentInterpreter::evaluate public function evaluate(array $data) { return ['argument' =&gt; $this-&gt;constInterpreter-&gt;evaluate($data)]; } しかし、結果は少し異なります Magento\Framework\Data\Argument\Interpreter\Constant::evaluate public function evaluate(array $data) { if (!isset($data['value']) || !defined($data['value'])) { throw new \InvalidArgumentException('Constant name is expected.'); } return …
8 magento2  di 

2
Magento 2のコンストラクターでのDIのクラスのトンに悩まされています-より良い方法はありますか?
現時点では、モジュール内で次のような類似のコンストラクターをまとめて作成することにイライラしています。 public function __construct( \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, /* ... */ \Foo\Bar\Model\Baz $baz, /* ... */ \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { $this-&gt;registry = $registry; /* ... */ $this-&gt;baz = $baz; /* ... */ /* some awesome stuff */ } 多くの場合、多くの場合、モジュール全体で同じクラスのインスタンスが必要です。 したがって、必要なクラスを提供する1つまたは2つの中心的なヘルパークラスをすべてのコンストラクターで定義するのではなく、使用するのが許容できる方法であるかどうか、私は疑問に思っていました。 …

2
Magento 2は特性の依存性注入をサポートしていませんか?
トレイトは実際にMagentoの依存性注入で機能しますか?次のコードを検討してください。 特性クラス namespace Frame\Slick\Block; use Frame\Slider\Slick\Block\Data as Helper trait Slick { protected $_slickHelper; public function __construct(Helper $slickHelper) { $this-&gt;_slickHelper = $slickHelper; } } トレイトを使用するクラス namespace Frame\Slick\Block; class Product ListProduct implements BlockInterface { use Slick; public function testTrait() { return $this-&gt;_slickHelper-&gt;getHelloWorld(); } } これは常にnullを返すようです。すべてが適切に含まれていることを確信しています。トレイトは依存関係注入を本当にサポートできますか? 編集:たとえば、トレイトコンストラクターでdiを実行してトレイト変数に割り当て、そのトレイトを使用するクラスで呼び出した場合、常にnullが返されます。その他はすべて正常に動作します。
8 magento2  php  di 

1
グローバルdi.xmlには何が入り、エリア固有のdi.xmlには何が入りますか?
バックエンドにいくつかの機能を追加するMagento 2モジュールを作成しています。フロントエンドにはまったく触れません。 しかし、etc/adminhtml/di.xml(admin diファイル)ファイルに仮想タイプを配置すると、クラスが見つからないというエラーが発生します。 同じ考え方etc/di.xml(グローバルdiファイル)を追加すると、すべてが正しく機能します。 フォーム修飾子のような他のものは、adminhtml diファイルに追加されたときに適切に機能します。 私が理解したことから、etc/di.xmlファイルとetc/adminhtml/di.xmlファイルの両方がバックエンドページに読み込まれる必要があります。 どうやらこれは常に機能するとは限りません。 以下は、adminhtml diファイルで機能しないマークアップです。 &lt;virtualType name="UmcConfigClassConfigSchemaLocator" type="Umc\Base\Model\Config\SchemaLocator\SchemaLocator"&gt; &lt;arguments&gt; &lt;argument name="fileSchema" xsi:type="string"&gt;class&lt;/argument&gt; &lt;argument name="mergedSchema" xsi:type="string"&gt;class&lt;/argument&gt; &lt;/arguments&gt; &lt;/virtualType&gt; &lt;virtualType name="UmcConfigClassConfigMapperFactory" type="Umc\Base\Model\Config\Mapper\Factory"&gt; &lt;arguments&gt; &lt;argument name="typeMap" xsi:type="array" /&gt; &lt;/arguments&gt; &lt;/virtualType&gt; &lt;virtualType name="UmcConfigClassConfigConverter" type="Umc\Base\Model\Config\Converter\Converter"&gt; &lt;arguments&gt; &lt;argument name="mapperFactory" xsi:type="object"&gt;UmcConfigClassConfigMapperFactory&lt;/argument&gt; &lt;argument name="mapperList" xsi:type="array" /&gt; &lt;argument name="idNodes" xsi:type="array"&gt; &lt;item name="0" xsi:type="string"&gt;class&lt;/item&gt; …
7 magento2  di 

1
`Magento \ Framework \ Model \ OrchestratorPool`とは何ですか?
私はこれをカタログモジュールdi.xmlから見つけました: &lt;type name="Magento\Framework\Model\OrchestratorPool"&gt; &lt;arguments&gt; &lt;argument name="operations" xsi:type="array"&gt; &lt;item name="default" xsi:type="array"&gt; &lt;item name="read" xsi:type="object"&gt;Magento\Framework\Model\Operation\Read&lt;/item&gt; &lt;item name="create" xsi:type="object"&gt;Magento\Framework\Model\Operation\Write\Create&lt;/item&gt; &lt;item name="update" xsi:type="object"&gt;Magento\Framework\Model\Operation\Write\Update&lt;/item&gt; &lt;item name="delete" xsi:type="object"&gt;Magento\Framework\Model\Operation\Write\Delete&lt;/item&gt; &lt;/item&gt; &lt;/argument&gt; &lt;/arguments&gt; &lt;/type&gt; それは何をするためのものか?どういう意味ですか?これはどこで使用され、何のために使用されますか?
7 magento2  di 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.