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

Magento 2プラグイン(BeforePlugin、AfterPlugin、AroundPlugin)に関する質問を示します。プラグインは、Magentoのドキュメントではインターセプターとしても知られています。

3
Magento 2:インタラクションの前後/前後のプラグイン
Magento 2で、「around」プラグインを作成するとき public function aroundRenderResult( \Magento\Framework\Controller\ResultInterface $subject, \Closure $proceed, ResponseHttp $response ) { //... $proceed($response); //... } 渡されたメソッドを呼び出し/呼び出すことで、実際の元のメソッドの呼び出しで終了するプラグインの周りの次のステップに進むことができます$proceed。これは、PHPフレームワークのミドルウェア実装でよく見られる一般的なデザインパターンです。 ただし、実装の詳細に多少の混乱があります。具体的には 場合は、に加えてaroundPlugin、オブジェクト/クラスが持っているbeforeかafter、定義されたプラグインをするとき、彼らはプラグイン周りのチェーンに関連して火災のですか? すなわち、すべてのbeforeメソッドは、Aroundプラグインメソッドが起動する前に起動しますか?または、プラグインが最終的な実際の実際のメソッドが起動する前にのみ起動しますか? 私が突き止めようとしている特定の問題は、Magentoがフルページキャッシュモードのときに、Magento 2フロントコントローラーのディスパッチメソッドにプラグインを接続できないように見えることです。フルページキャッシュは、を呼び出さない aroundプラグインによって動作します$proceed($response)。私はこれらのプラグインを取り巻くコードのいくつかを掘り下げてみましたが、そのプラグインがどのように機能するかを知らずにシステムを推論することは困難であることがわかりました。 つまり、dev docsページの説明は、この1つの特定のインスタンスでは不正確であるように見えます。ドキュメントが間違っているのか、これが最近導入されたバグなのか、エッジケースなのか、プラグインの設定が間違っているのかは不明です。 この優先順位付けがどのように機能するのか、直接観察することにより、または文化的知識により、誰もが知っていますか?

5
Magentoプラグイン開発の学習
私は13年以上PHP開発者であり、WordPressのような他の人気のあるプロジェクトに限り、PHP自体に関する広範な知識を持っています。Magentoの経験はありません。 私は現在、Magentoを使用している会社でフルタイムの仕事をしていますが、私の開発作業はすべてMagentoで行われる予定です。 Magentoを初めて見た後の私の最初の考えは、すごいものになりました。しかし、その後、私の経験豊富な開発者が出てきて、それがただのPHPであることを思い出します。 ですから、Magentoの基本的な質問がいくつかあります。Magentoの経験豊富な開発者からの回答に感謝します。 このサイトの横にあるmagento開発について学ぶための最も便利な場所は何ですか? これまでのところ、拡張機能/プラグインは非常に混乱しています。WordPressのような他のプラットフォームでは、プラグインを独自のフォルダーに配置することができ、すべてのファイルはそのフォルダーの下に保存されます。これまで見てきたことから、プラグインはMagentoのいくつかのフォルダに散らばっているかもしれませんが、これは正しいですか? コア機能をオーバーライドする方法について学びました。コア内のファイルがここにある場合、/app/code/core/Mage/SitemapModel/Resource/Catalogこの場所にファイルを作成することでオーバーライドできます。これ/app/code/local/Mage/SitemapModel/Resource/Catalogは拡張機能/プラグインでどのように機能しますか?コア機能をオーバーライドする必要があるプラグインを作成する場合、その拡張機能が機能するためにファイルをいたるところに配置する必要がありますか? magentoを始めて知ってほしい他の情報はありますか? 洞察力のおかげで、これは複数の部分からなる質問であることはわかっていますが、答えは自分自身や他の人にとって役立つと思います。必要に応じてこの公開ウィキを作成します

2
Magento 2:プラグインとオブザーバー
Magento 2では、何かを達成するためにプラグインとオブザーバーを使用することの長所と短所は何ですか? オブザーバーはイベントにサブスクライブするのに対し、プラグインはMagentoクラスでパブリックメソッドが呼び出される前および/または後にジャンプできることを理解していますが、確かにそれらはパスを交差するところに近づいていますか?

1
Magento 2:var / generationのInterceptorsファイルとは何ですか?
だから私はいくつかのInterceptor.phpファイルに気づいたvar/generation このフォルダには、次の目的でオンザフライで作成された生成クラスが含まれていることを知っています。 工場 プロキシ プラグイン Interceptorファイルはプラグインにリンクされていると思いますが、それらのファイルがどのように生成されるか分からないことがあります。たとえば、私は持ってvar/generation/Magento/Framework/App/Response/Http/Interceptor.phpいますが、このファイルは既存のクラスと一致しないようです。 だから私はInterceptor.phpファイルがどのように生成されるかについてよく説明されたワークフローを探していますか?

2
Magento 2クラスとプラグインの書き換え
Magento 2には、Magento 1とは反対のプラグイン/インターセプト/インターセプターの概念があります。 これらは、すべてのパブリックメソッドのイベントの前後のように機能します。いいね メソッドの機能を置き換えるためにプラグインを 使用することもできaroundます。 ただし、Magento 2では、M1方式とほぼ同様にクラスを書き換えることができます。 プラグインを使用する代わりにクラスを書き換えることが方法であるいくつかの例を見てみたいと思います。 これは、コア保護されたメソッドの動作を変更したいときに便利ですが、書き換えが推奨または必要な場合は他にありますか?

3
Magento 2の「インターセプト可能/プラグイン可能」なクラス
日付:2015年5月30日(Magento 2の性質の変化を考慮)。 Magento 2は、インターセプターパターンを介して実装されたプラグインコンセプトを導入しました。 ドキュメントから明らかでないのは、Magentoのどのクラスとオブジェクトが「インターセプト可能」なのかということです。つまり、次のようなXMLを使用してプラグインを構成します <config> <type name="{ObservedType}"> <plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="true"/> </type> </config> ただし、として有効なクラスは明確ではありませんObservedType。この古いwikiの記事は、それが言うときにいくつかの手がかりを提供します プラグイン機能は適用されないことに注意してください-依存性注入なしで作成されたクラス、つまり、演算子newを直接使用して作成されたクラス ある任意の傍受することが可能な依存性注入を経て作成されたオブジェクトは?メソッドでObservedType提供されるタイプヒントである必要がありますか__construct、それとも他の何かである必要がありますか? 主に、Magento 2インターセプターを使用する前に、Magento 2インターセプターでできることとできないことを回避しようとしています。

2
Magento 2:プラグインクラスに名前を付けない場合の結果 `\ Plugin`
Magento 2で終わらないプラグインクラスを使用した場合の結果はあります\Pluginか?ドキュメントは示唆このクラスは、名前で終わるべきであること\Plugin。 プラグインのクラスまたはその仮想タイプの名前。この要素を指定するときは、次のスキーマを使用します:\ Plugin。 ただし、これに従わないコードプラグインがいくつかあります。 <!-- #File: app/code/Magento/Weee/etc/frontend/di.xml--> <plugin name="weee-app-action-dispatchController-context-plugin" type="Magento\Weee\Model\App\Action\ContextPlugin"/> \Pluginクラス名に使用しないことによるプログラム上の影響はありますか?または、これは単なる_Observer規則ですか?Magento 1のクラス名規則に似ていますか?
14 magento2  plugin 

2
Magento2でコアプラグインをオーバーライドまたは無効にする方法
Magento2を使用してマーケットプレイスを構築しています。そのため、ベンダーの顧客資格情報を使用して顧客の注文を読み込むことができる必要があります。 これに関する問題は、Magento2がプラグインを使用して、この注文の顧客(または管理者)のみが注文をロードできることを確認することです。 この場合、プラグイン全体をオーバーライドするか、protected methodをオーバーライドする必要がありますisAllowed()。コアを変更せずに何ができますか? Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization このように見える: use Magento\Authorization\Model\UserContextInterface; use Magento\Framework\Exception\NoSuchEntityException; class Authorization { /** * @var UserContextInterface */ protected $userContext; /** * @param UserContextInterface $userContext */ public function __construct( \Magento\Authorization\Model\UserContextInterface $userContext ) { $this->userContext = $userContext; } /** * Checks if order is allowed * * @param \Magento\Sales\Model\ResourceModel\Order $subject * …

4
Magento 2の抽象クラスをオーバーライドする
Magento 1では、抽象クラスをローカルディレクトリまたはコミュニティディレクトリにコピーすることができ、Magentoはこのクラスを自動ロードするときにそれを使用しました。 代わりにMagentoにクラスをロードする解決策はあり vendor/magento/framework/Model/AbstractModel.phpますか? di.xml抽象クラスの設定は機能しません。プラグインのみ?

1
カートルールが無効になった場合のイベントまたはプラグインスポットはありますか?
ショッピングカートの価格ルールが有効でなくなったとき(有効期限が切れたとき、または適用されなくなった他の製品の数量を変更したときなど)にプラグインできるイベントまたは場所はありますか?カートから自動的に削除されることはわかっていますが、コードでこれが発生している場所を見つけることができません。 小計がXの金額を超えるクーポンのカートに無料の製品を追加するモジュールを書いています。カート内のアイテム数を減らして小計がXを下回る場合を除いて、すべて正常に機能しています。クーポンは削除されますが、商品はカート内に残ります。 これまでのところ、私はこれまでに必要なことをするために次のイベントを利用しました... salesrule_validator_process checkout_cart_update_items_after sales_quote_collect_totals_before とメソッドMagento\Quote\Model\CouponManagementがあるのでどちらが有望に思えるかはわかりましたが、カートが更新されたときに呼び出されていないようです。set()remove() でcheckout_cart_update_items_after、それはまた、私は確認することができます論理的な場所のように思えるが、それはまだに応じて設定されたルールを表示されます$cart->getQuote()->getAppliedRuleIds() 更新:ルールがまだカートにあるかどうかを知っているcheckout_cart_save_after後に実行されるイベントのオブザーバーを追加することcollectTotals()になりました。次に、と比較$quote->getAppliedRuleIds()し$quote->getOrigData('applied_rule_ids')て、ルールが削除されているかどうかを確認します。これを行うにはもっと良い方法があるように感じますが、今のところうまくいきます。クーポンの有効期限が切れてもまだ問題があります...

1
パラメータ$ proceedの呼び出し可能パラメータとクロージャパラメータの間でメソッドが異なるMagento2プラグイン
私はmagento2をチェックしました、送信できるパラメータには2つのタイプがあります アラウンドメソッド \Closure $proceed 例 aroundSave(\Magento\Catalog\Model\Product $subject, \callable $proceed) \callable $proceed 例 aroundSave(\Magento\Catalog\Model\Product $subject, \Closure $proceed) 今私の質問: 閉鎖と呼び出し可能の違いは何ですか? $ proceedパラメーターにタイプ2の異なるタイプを定義するのはなぜですか? この2つのタイプのパラメーターの用途は何ですか? 詳細を説明できますか



3
Magento 2:どの拡張メカニズムを選択しますか?
コントローラーを拡張するには、設定の使用とプラグインの使用の2つの方法があります。しかし、私はそれを理解していません、どちらが良いのか、そしてプラグインと比較して好みの利点/欠点です。 <preference for="Magento\Checkout\Controller\Index\Index" type="mymodule\Helloworld\Controller\Index\Index" /> <type name="Magento\Catalog\Model\Product"> <plugin name="getname-test-module" type="mymodule\Helloworld\Model\Plugin\Product" sortOrder="10"/> </type>

2
マジックゲッター/セッター用のプラグイン
ユーザーのレビューをMagento 2のフロントエンドに投稿したときではapprovedなく、レビューのステータスを作成しようとしています 。このアプローチを採用しました。このように見えるのメソッドのために、フロントエンド領域でのみ利用可能なbeforeプラグインを作成しますpendingsetStatusIdMagento\Review\Model\Review public function beforeSetStatusId(\Magento\Review\Model\Review $review, $status) { return [\Magento\Review\Model\Review::STATUS_APPROVED]; } それは良い考えのように私に縫い合わせました。承認済みのステータスを返すので、問題なく機能するはずです。実際のメソッドは、これをパラメーターとして取得する必要があります。 驚いたことに、それはうまくいきませんでした。 それから私は掘り下げて、メソッドsetStatusIdがレビューモデルに存在しないことを発見しました。それは魔法のように呼ばれ、実際に実行されsetData('status_id', $status)ます。 次に、生成されたインターセプターを調べましたが、実際にはsetStatusIdメソッドはありません。 magento 2でマジックゲッター/セッターをプラグインするにはどうすればよいですか?それは可能ですか? 注:レビューを自動承認するためのソリューションは必要ありません。私は、save_beforeイベントのような他のアプローチを取ることができることを知っています。これは今のところ重要ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.