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

5
Magento 2でリポジトリとファクトリを使用する場合
Magento 2でいくつかのチュートリアルを行ったところ、少し混乱しました。基本的に、ビジネスエンティティを読み書きできる方法は2つあります。 データを取得する 工場アプローチの使用 $object = $this->myFactory->create(); $object->load($myId); リポジトリアプローチの使用 $repo = $this->myRepository(); $object = $repo->getById($myId); データを保存する 工場アプローチの使用 $object = $this->myFactory->create(); $object->load($myId); $object->setData('something', 'somethingDifferent')->save(); リポジトリアプローチの使用 $repo = $this->myRepository(); $object = $repo->getById($myId); $object->setData('something', 'somethingDifferent'); $repo->save($object); 依存関係注入を使用して、リポジトリとファクトリクラスの両方を注入できることもわかります。これは少なくとも私にとって混乱を招きます。 リポジトリアプローチとファクトリアプローチはいつ使用する必要がありますか?従う必要があるベストプラクティスは何ですか?

3
Magento 2でファクトリーの生成をトリガーするもの
Magento 2には、事前に生成された、またはその場で生成された多くのクラスファイルが含まれています。彼らが住んでいます var/generated これらの生成されたファイルには、ファクトリクラスが含まれます。ドキュメントから、プログラマーはファクトリクラスを使用して「注入不可能な」オブジェクトをインスタンス化することを理解しています。「非注入可能」オブジェクトとは、通常、インスタンス化にユーザー入力が必要なため、依存性注入を介して追加できないオブジェクトです__constructor。 ドキュメントから明らかでないのは、Magento 2がファクトリクラスを生成する必要があることをどのように認識するかです。このビット ランタイムモードまたはコンパイラのオブジェクトマネージャが存在しないファクトリに遭遇した場合、オブジェクトマネージャはファクトリを生成します。 オブジェクトマネージャー(または拡張機能により、依存関係の挿入__constructors)でファクトリクラスを使用すると、Magento 2がそれを生成するように聞こえます。しかし、オブジェクトマネージャーは、私が要求しているのがファクトリーであることをどのようにして知るのでしょうか? また、生成されたすべてのクラスを自動的に生成(または「コンパイル」)するための2つの コマンドがあるようです。これらのコマンドのいずれかを実行すると、多数のファクトリクラスが生成されます。 必要なファクトリオブジェクトを生成するために、これらのコマンドはどの構成ファイルやコードファイルを調べていますか? オブジェクトマネージャやコマンドコードを最後までたどることでこれが明らかになることはわかっていますが、長くて骨の折れる旅を避けたいと思っています。

2
magento2でのページファクトリクラスの使用
\Magento\Framework\View\Result\PageFactoryコンストラクターに挿入された結果ファクトリクラスを使用してMagento2でカスタムモジュールページをレンダリングし、表示するページを作成する目的は何ですか $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE); Magento 1.xのアプローチと同じように、以下のような表示を行うのではなく、 $this->_view->loadLayout(); $this->_view->renderLayout();

2
Magento2のMagento2ファクトリーパターンの利点1
Magento 2は、注射不可のファクトリクラスを使用しています。 たとえば製品クラス:ProductFactory たとえば顧客クラス:CustomerFactory 私はここで工場パターンのタイプが何であるか理解できませんか? 1つのファクトリクラスに関連付けられている各クラスのため。私はその何かが重複していると考えています。 なぜ私たちはのための抽象工場作成するべきではないCustomerFactory、ProductFactoryなど? また、たとえば: 私たちは、渡すことができますAbstractFactoryタイプのチェックのための代わりProductFactoryにProductRepositoryクラスのコンストラクタ。 したがって、ProductRepositoryとの間の密結合を避けることができますProductFactory 抽象ファクトリークラス: namespace Magento\Framework\ObjectManager\Code\Generator; /** * Abstract Factory class */ abstract class AbstractFactory { /** * Object Manager instance * * @var \Magento\Framework\ObjectManagerInterface */ protected $_objectManager = null; /** * Instance name to create * * @var string */ protected $_instanceName …

3
Magento 2:サービス契約を使用する利点は何ですか?
ご存じかもしれませんが、Magento 2が推奨するCRUDアクションのモデル/コレクションの処理方法は、サービスコントラクトを使用することです。 しかし、Magento SE Q&Aによると、ほとんどの人は代わりにモデル/リソースモデル/コレクションを直接使用する傾向があるようです。 見積もりを読み込む例として、次のようにファクトリを介して直接行うことができます。 $this->quoteFactory->create()->load($quoteId); の$this->quoteFactoryインスタンスはどこですか\Magento\Quote\Model\QuoteFactory しかし、私はこのようなサービス契約を介してそれを行うこともできます: $this->quoteRepository->get($quoteId); の$this->quoteRepositoryインスタンスはどこですか\Magento\Quote\Api\CartRepositoryInterface だから私の質問は、工場よりもサービス契約を使用する利点は何ですか?

2
Magento 2:コントローラーアクションから「表示」に変数を渡す
Magento 1で、コントローラーアクションから「ビュー」にデータを渡す場合(レイアウトのブロックなど) 経由でグローバルレジストリに値/オブジェクトを追加します Mage::register 実行後にブロックオブジェクトを直接フェッチし、フェッチしたブロックオブジェクトにデータプロパティを設定します loadLayout phtmlファイル内のブロックオブジェクトのメソッドを呼び出し、ブロックオブジェクトにモデル/データベースレイヤーを使用して、コントローラーアクションで以前に保存されたデータを読み取らせる ブロックオブジェクトメソッドを使用してデータベースから読み取ることは、Magento 2でも引き続き機能するようです。これは、特定の種類の操作に適しています。しかしながら、 Magento 2にはグローバルレジストリがありません(またはありますか?) レイアウトシステムは、ファクトリを介してページオブジェクトを作成することで機能するようになりました。Magento1と同じ方法でブロック参照を取得することはできません。 Magento 2では、コントローラーアクションからビューに直接データを渡すことはできますか?それとも、これはMagentoの勇敢な新しいDesign Pattern™の世界のパターンでもありますか?これがあまりにも直接的なパターンである場合、テンプレートに表示したい計算された情報があるが、その情報をステートフルシステムに保存したくない場合(つまり、データベース) 私はこれを自分で一緒にハックするいくつかの異なる方法を考えることができますが、Magento 2 がどのようにあなたにそれを望んでいるかに興味があります。 注:このようなものを使用して、コントローラーアクションでブロックインスタンスをフェッチすることが可能であることを認識しています $resultPage = $this->resultPageFactory->create(); $block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js'); var_dump(spl_object_hash($block)); Magento 2コアコードはこれを頻繁に行います。しかしながら-ブロックオブジェクトがコントローラオブジェクトにフェッチと思わに利用可能であるとは異なるオブジェクトphtmlのいずれかを介してテンプレート$thisまたは$block(前者($this後(一方、実際にテンプレートを描画オブジェクトであると思われる)$block)があるように思われますMagento Blockタイプのインスタンス)。 #File: path/to/template.phtml var_dump(spl_object_hash($block)); var_dump(spl_object_hash($this)); コントローラーアクションメソッドにデータを設定すると、phtmlテンプレートでデータが利用できなくなり、spl_object_hash上記の結果を比較すると、3つの異なるハッシュが得られるため、「あるように見えます」と言います。しかし、私はこれに十分慣れていないので、上記のエラーは他のエラーになる可能性があります。したがって、ブロックにデータを設定してテンプレートで取得できた場合は、それについて聞いてみたいです!

1
Magentoのファクトリーメソッドの完全なクラス名
Magento 1では、ファクトリメソッドで完全なMagentoクラス名を使用すると、オブジェクトをインスタンス化できます //trying full class name instead of catalog/product $object = Mage::getModel('Mage_Catalog_Model_Product'); ただし、同じことはヘルパーには機能しません。あなたがしようとすると Mage::helper('Mage_Core_Helper_Url'); あなたが得る Warning: include(Mage/Mage/Core/Helper/Url/Helper/Data.php): failed to open stream: No such file or directory in /path/to/magentolib/Varien/Autoload.php on line 93 #0 /path/to/magentolib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(Mage/Ma...', '/path/to/magent...', 93, Array) #1 /path/to/magentolib/Varien/Autoload.php(93): Varien_Autoload::autoload() #2 [internal function]: Varien_Autoload->autoload('Mage_Mage_Core_...') #3 /path/to/magentoapp/Mage.php(547): spl_autoload_call('Mage_Mage_Core_...') #4 /path/to/magentoapp/code/local/Sebastianjuffar/Commercebug/controllers/IndexController.php(11): …
11 model  helper  factory 

1
ObjectManagerファクトリの違いは何ですか?
Magento 2には3つのファクトリークラスがあることがわかります(抽象クラ​​スを数えると4)。 \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Developer \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Production \ Magento \ Framework \ ObjectManager \ Factory \ Compiled 上記のすべてが拡張され\Magento\Framework\ObjectManager\Factory\AbstractFactoryます。 開発者モードではDeveloperファクトリーが使用されると想定していましたが、場合によってはファクトリーが使用され、Compiled条件を特定できません。 各工場がいつ使用されるのか、それらの違いは何ですか?

3
ユニットテストでファクトリまたはプロキシを生成:「ReflectionException:Class…Factory does not exist」
私が理解している限りFactory、Proxyクラスがまだ存在しない場合、クラスはオートローダーによってオンザフライで生成されますvar/generation(参照:Magento 2でのファクトリーの生成をトリガーするもの) しかし、ユニットテストで新しいファクトリを参照するときにこのエラーが発生するのはなぜですか? ReflectionException:クラスMagento \ Framework \ Api \ Search \ SearchCriteriaBuilderFactoryは存在しません [...] / vendor / magento / framework / TestFramework / Unit / Helper / ObjectManager.php:161 use Magento\Framework\Api\Search\SearchCriteriaBuilderFactory; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; class SearchCriteriaTest extends \PHPUnit_Framework_TestCase { public function testFactoryGeneration() { $searchCriteriaBuilderFactory = (new ObjectManager($this))->getObject(SearchCriteriaBuilderFactory::class); } } ブートストラップファイルを使用していますdev/tests/unit/framework/bootstrap.php。 クラスを生成するために見つけた回避策: 実際のオブジェクトマネージャーを使用(ありがとう@DigitalPianism): \Magento\Framework\App\Bootstrap::create(BP, …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.