タグ付けされた質問 「magic-getter」

2
Magento 2-マジックゲッターを使用/回避するための良い習慣ですか?
Varien_Object(M1)およびDataObject(M2)のマジックゲッターは一般的な方法ですが、Magento 2では使用するのが間違っているように感じます。 良い: 読み書きが簡単 悪い キーに数字を使用すると問題が発生します(Magento 2:コレクションのフィールドを取得する別の方法、またはラクダケースを使用してカスタム製品属性を取得するを参照)。 コード分​​析ツールが存在しないメソッドについて文句を言う 質問 Magento 2には、2つの新しいメソッドがあります。 getDataByKey($key) getDataByPath($path) まだ使用する正当な理由getData($key)や魔法のゲッターはありますか? 編集: @Vinaiありがとう。@method私のアプローチはかなり異なっていたので、私は方法に言及しませんでした。 IDEに役立つだけで、他のものには影響しません。 いくつかのmergedf PRがあります。これは、ループの(int)代わりにキャストしintval()たり、ループの外に配列サイズを取得したり(小さな配列であっても)するような「マイクロ最適化」です。 一方、 マリウスが説明したように、いくつかの「オーバーヘッド」を持つ魔法のゲッター.... strtolower(trim(preg_replace('/([A-Z]|[0-9]+)/', "_$1", $name), '_')); getData($key) mehtodsも2-3の追加チェックが必要です... if ('' === $key) { if (strpos($key, '/')) { if ($index !== null) { 独自のコードの場合、実際のメソッドを好むことに完全に同意しますが、同じケースではおそらくそうではありません...たとえば、カスタムイベントを作成しました... $value = $observer->getVar_1(); $value = $observer->getData('var_1'); $value = …

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イベントのような他のアプローチを取ることができることを知っています。これは今のところ重要ではありません。

2
Magento 2:コレクションの別の方法の取得フィールド
私はMagento 2にこのヘルパークラスを持っています: class Data extends \Magento\Framework\App\Helper\AbstractHelper { protected $_countryFactory; public function __construct( \Magento\Directory\Model\CountryFactory $countryFactory ) { $this->_countryFactory = $countryFactory; } public function getCountryIsoCode($country = 'US') { $country = $this->_countryFactory->create()->getCollection(); $country->addFieldToFilter('country_id', array('eq' => country)); $countryCode = $country->getFirstItem()->getIso3Code()); $countryCode2 = $country->getFirstItem()->getData('iso3_code')); // $countryCode => null // $countryCode2 => 'USA' return $countryCode; } …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.