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

1
Magento 2.1:エンティティマネージャーの使用
2.1からMagentoが導入されましたMagento/Framework/Model/EntityManager 私はここで間違っているかもしれませんが、私の理解から、Magento/Framework/Model/AbstractModel継承を介して機能を実装していたものを置き換え、構成を介してこれを解決することです(FYI:https : //en.m.wikipedia.org/wiki/Composition_over_inheritance) コアファイルでサンプルを入手できます:https : //github.com/magento/magento2/blob/59671558ecdab652b40db2d1a7c63d5b1dea0a92/app/code/Magento/Cms/Model/ResourceModel/Block.php 基本的に、すべてのCRUD操作はクラスで明示的に宣言され、クラスに委ねられEntityManagerます。2.1以前では、親メソッドは継承を介して呼び出されていました。 だから私の質問は: EntityManager2.1以前の継承システムに比べて、どのような利点がありますか? されるだけで十分(上記の例のように)CRUDメソッドを宣言すると、カスタムのCRUDモジュールでそれを実装を開始以上ありますか?

2
Magento 2でカスタムモデルを読み込む最良の方法
正しい方法を見つけることは私にとって困難だったので、以下であなたが私が作ったベストプラクティスを見つけることができました。楽しんで、必要に応じて英語を修正し、私が間違っていると言ってください。:) 編集: ...そして、私はいくつかの面で間違っていたことがわかりました。だから、ラファエルの答えが私をもっと理解するのを助けてから、元の投稿を更新しました。彼に感謝! 以下で使用される概念: これらの概念に慣れていれば、以下のコードと説明を理解しやすくなります。 インジェクションの依存関係($this->variableコード内のすべての変数がインジェクトされるため) サービス契約とリポジトリ 工場 コンテキスト: より多くのコンテキストを持つために、モジュールが正しく構築されていると想像してください: 方法を含むブロッククラスCustomBlock getCustomModel($id)、 このメソッドは、paramで渡されたIDに基づいてCustomModelオブジェクトを返します。 CustomModelタイプは、モデルに対応します \Vendor\Module\Model\CustomModel このモデルには、そのリソースモデル(\Vendor\Module\Model\ResourceModel\CustomModel)が付属しています およびそのリポジトリ(\Vendor\Module\Model\CustomModelRepository)を使用します。 質問: すべてがCustomModelオブジェクトをロードできるようにするベストプラクティスは何ですか? load()このメソッドは廃止されているため、CustomModelオブジェクトからを使用することはできません。 良い習慣は、CustomModelサービス契約を使用する必要があることです。サービスコントラクトは、データインターフェイス(CustomModelInterfaceなど)とサービスインターフェイス(CustomModelRepositoryInterfaceなど)です。だから私のブロックは次のようになります: / ** @var SlideRepositoryInterface * / 保護された$ slideRepository; / ** * CustomBlockコンストラクター * ... * @param CustomModelRepositoryInterface $ customModelRepository * ... * / パブリック関数__construct( ... CustomModelRepositoryInterface $ customModelRepository ... …

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 だから私の質問は、工場よりもサービス契約を使用する利点は何ですか?

1
大量のアクションでループの保存を回避する
CMSページの場合と同様のインライン編集アクションを含む独自のCRUDモジュールを作成しました。 すべてが正常に動作しますが、EcgM2標準で phpsnifferを実行すると、次の警告が表示されます。 ループで検出されたモデルLSDメソッドsave() どうすればこれを回避できますか? 注:上記のリンクされたコアファイルを「スニッフィング」すると、同じ警告が表示されます。 ここにexecute誰かがそれを必要とする場合の私の方法があります。しかし、それはCMSページコントローラーからのものと非常に似ています public function execute() { /** @var \Magento\Framework\Controller\Result\Json $resultJson */ $resultJson = $this->jsonFactory->create(); $error = false; $messages = []; $postItems = $this->getRequest()->getParam('items', []); if (!($this->getRequest()->getParam('isAjax') && count($postItems))) { return $resultJson->setData([ 'messages' => [__('Please correct the data sent.')], 'error' => true, ]); } foreach (array_keys($postItems) …

2
画像フォーム要素を追加/編集フォームに追加する
管理者リストとフォームのUIコンポーネントを使用してMagento 2のCRUDモジュールを構築しており、エンティティの1つに画像フィールドがあります。 しかし、私はそれを正常に機能させることはできません。 動作方法は次のとおりです。 アップロードされた画像のない追加モードまたは編集モードでは、単純なファイル入力のように見えるはずです。 ファイルがアップロードされると、画像プレビューとその下の削除ボックスが表示されます。 まさにこのデザインを探しているわけではありません。見た目は異なりますが、機能は同じです。 Magento 1では、独自のブロックレンダラーを作成するだけでこれを行うことができました class {{Namespace}}_{{Module}}_Block_Adminhtml_{{Entity}}_Helper_Image extends Varien_Data_Form_Element_Image { protected function _getUrl() { $url = false; if ($this->getValue()) { $url = Mage::helper('{{namespace}}_{{module}}/{{entity}}_image')->getImageBaseUrl().$this->getValue(); } return $url; } } これをフォームブロックに追加します $fieldset->addType( 'image', Mage::getConfig()->getBlockClassName('{{namespace}}_{{module}}/adminhtml_{{entity}}_helper_image') ); しかし、Magento 2 にはフォームブロックがありません。UIコンポーネントファイルのフォームフィールドにクラス名を使用できることは知っています。 <field name="image" class="Class\Name\Here"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item …

2
モデルをロードする適切な方法は何で、なぜですか
私はMagentoでかなりの経験を持っていますが、モデルをロードする方法が正しい方法とその理由を理解していないことに気付きました。私はトピックについてできる限りのことを読みましたが、このようなことを説明している人々は実際には説明するのに十分な深さでは決してありません。ロードしたいモデルのリポジトリがないとしましょう。 これまでは、コンストラクターで常にモデルを使用していて、単純にそれをロードしていました。 public function __construct( \Vendor\Module\Model\Something $somethingModel ) { $this->somethingModel = $somethingModel; } public function getTestById($id) { return $this->somethingModel->load($id); } そして、それは常に意図したとおりに機能しました。また、コアで一般的に使用されているか、少なくとも使用されていたと確信しています。 しかし、私は同僚の一人が modelFactory->create()->load($id) 工場が新しいエンティティの作成に使用されていることを理解している限り、たとえば、新しい製品を作成したい場合は、ファクトリを作成し、データを入力して保存できます。しかし、再び、トピックの調査を開始し、この方法でモデルをロードしていたファビアンシュメングラー(Magento 2でリポジトリとファクトリを使用する必要がある場合)の例を見ました。 tそれが「サービス契約の一部ではない」と言うことのほかに理由を説明してください。リポジトリがサービスコントラクトの一部であることを理解している限り、リポジトリからは利用できないモデルの読み込みに関しては、ここでは何の関係もありません。 さらに混乱を加えるために、作成されたmodelFactoryからresourceModelを取得してモデルをロードする方法も見つけました。VinaiKoppによって提示されました(Magento 2でカスタムモジュールのサービスコントラクトを実装する方法は?)。リソースモデルを直接使用するべきではないことをいつも読んだので、完全に失われました。 だから、ええ、誰かが正しい方法を教えてもらえますか?なぜ私が他のすべての方法の代わりにそれを使うべきなのでしょうか?

2
Magento 2とサービス契約
この質問については多くのトピックがあることは承知していますが、明確に理解することはできません。 いつサービス契約を利用する必要がありましたか? CRUDの代わりにModel/ によって行われ ResourceModelますか? カスタムモジュールのデータテーブルを使用する各エンティティのサービスコントラクトを毎回作成する必要がありましたか? 彼らは将来の発展にとって本当に興味深いのでしょうか? Magento がコントローラー/ブロックのモデルからsave/ loadを使用する場合と使用しない場合があるのはなぜですか? ありがとうございました

4
単純なMagento 2 CRUDモデルに必要なコードと構成の例?
エンドユーザープログラマーであるMagento 2で新しい「CRUD」モデルを作成するにはどうすればよいですか?つまり、PHPクラスファイルとXML構成ファイルを作成して、 データベーステーブルからデータを作成、読み取り、更新、および削除します この情報を格納する初期データベーステーブルを作成します。 Magento 1では、これはモデル、リソースモデル、セットアップリソースモデル、およびのさまざまなノードによって処理されていましたconfig.xml。Magento 2でこれがどのように処理されるかは100%明確ではありません。 このためのサンプルモジュールまたは明確なチュートリアルはまだありますか?または、既存のコアモデル(CMSページなど)から逆方向に作業することが唯一の選択肢ですか?
8 php  magento2  sql  crud 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.