Magento Marketplace technical review reportによって発生した警告/エラーを修正する方法は?
-
29-09-2020 - |
質問
新しいMagento Marketplaceでは、提出された拡張機能は、Marketplaceを介して承認され、利用できるようにするために、いくつかの検証状態を通過します。
そのうちの1つは技術レビューであり、そこから次のような技術レポートを入手できます:
あなたが見ることができるように、200+の警告はちょっと私の地獄を怖がって、ドキュメントで利用可能なリストとは別に、すべての警告を修正するの: http://docs.magento.com/marketplace/user_guide/extensions/review-code-validation.html?
解決
時間後の報告が浮かび上がった下記リストでも皆さんいいと思います。
まだ更新されています注意誤り:
警告
線80文字を超える;を含むXの文字
または
ラインを超える最大限の100キャラクター、を含むXの文字
についての一私見るので自己説明では、良い練習ができ続符号線を小さく保つため、クリーンで読めます。
ないことが判明した場合はカンマで機能を呼
いという関数を受け取るパラメータはなかった追加スペース後のカンマ.例: strrchr($bla,".")
すべき strrchr($bla, ".")
期待\"が(...){ \";見\"が(...) { \"
期待\"foreach(...){ \";見\"foreach(...) { \"
期待\"の場合(...){ \";見\"の場合(...) { \"
期待\"}else{ \";見\"} else{り
こに戻ってきたラインのブラケットのPHPに記述です。
例は悪い文法とif/else文:
if (true)
{
}
else
{
}
すべき
if (true) {
} else {
}
閉会の括弧のブレースマルチライン機能を宣言する必要が同じライン
ほとんどの時間で起こるコンストラクタの場を宣言するようなこと:
public function __construct(
ProductFactory $productFactory,
Test $test
)
{
}
ができ
public function __construct(
ProductFactory $productFactory,
Test $test
) {
}
末文字は無効;期待\"何"が見つかり\" \"
がほとんどの時間のファイルの先頭でのお客様にIDEのコードを返します。
変数\"your_variable\"は有効なキャメルキャップ形式
各変数のものを使用しなければなキャメルキャップ形式で $your_variable
すべき $yourVariable
変数\"one2Three\"を含む数がすることは勧められ
の使用は避け数字変数
インラインの制御構造が不可
を用いてはいけませんのインライン制御などの構造:
else $test = true;
を使います:
else {
$test = true;
}
開設ブレースのクラスのライン後の定義
戻ってきたラインを宣言する場合、クラス:
class Test
{
抑えたい場合に適した製品です。開設ブレースを同一ライン:
class Test {
プライベートメンバー変数\"yourVariable\"が含まれていなければならないグアンダースコア
保護メンバ変数\"yourVariable\"が含まれていなければならないグアンダースコア
を追加してくださいグアンダースコアを保護し、個人会員の変数: $_yourVariable
として反対の場合、追加アンダースコアの公開の可変ができ:
公共のメンバー変数\"_yourVariable\"などを含めないでくださいグアンダースコア.
のメソッドのパラメータ$blaは一切使用しておりません
また、パラメータをチューニング方法では決して使用しないことです。
マルチライン機能を宣言しないインデントを正確に予想8空間が見つかりX
を追加すぎるとインデントを関数の宣言のパラメータ:
public function __construct(ProductRepository $productRepository,
ListsInterface $listsInterface,
Data $helper
) {
き
public function __construct(ProductRepository $productRepository,
ListsInterface $listsInterface,
Data $helper
) {
可能な方法をオーバー検出
だけをオーバー方法を追加、修正例:
public function __construct(Context $context) {
parent::__construct($context);
}
モデルLSD法load()検出されたループ
ご利用中の load()
方法の中にループするにはおすすめることになります。
そのコードは以下のようなものです:
foreach(...) {
$model->load();
}
ま荷モデルのループで実際にイも広く満天の星空を望めます。用できます。た場合のみ取得する際に必要数の属性を使用してみてください集ます。
機能の循環的複雑度(X)exceeeds10;検討リファクタリング機能
だ知らない循環的複雑さであることをお読み取りです: https://pdepend.org/documentation/software-metrics/cyclomatic-complexity.html .この警告は基本的にあることを示すものが多く、ループ条件です。
ダイレクトオブジェクトをインスタンス化する働ざ2
であることによるいスをインスタンス化するオブジェクトを直接呼び出しのクラスは、例えば:
new \Zend_Filter_LocalizedToNormalized
のものを使用できる依存関係に注射または最後のリゾートには、オブジェクトマネージャ。
コメントを参照して、TODOタスク
のコメントは以下のものになります @TODO
フラグ。
を避ける場合は諸表において、常にtrueまたはfalse
い状態ということを常にtrueまたはfalseです。
例えば:
$variable = "6";
...
// More code that doesn't change $variable
...
if ($variable)
誤差
名前空間、"クラス\"クラスは、指定されません。
抜けていて、 use Path\To\Class;
決算開始時に、クラスです。
他のヒント
CodesnifferをMEQP1またはMEQP2ルールセット(Magentoのバージョンに応じて)で使用すると、Magentoルールセットについてのアイデアが得られます: https://github.com/magento/marketplace-eqp/tree/master/
このルールセットとMarketplaceの送信プロセスで実行されているルールセットは、常に完全に同期しているとは限らないため(もちろん、それが理想的です)、Githubで最
より一般的な"severity-10"エラー(拡張機能が拒否される唯一のエラー)とその推奨事項には、次のようなものがあります:
Phpファイルの最後に終了タグを使用することはできません
推薦:PHP終了タグを削除します。
コールタイムの参照渡しコールは禁止されています
推薦:PHP5での参照に関するドキュメントを読み、コードをリファクタリングします。参考文献: http://php.net/manual/en/language.references.pass.php
EN_ENVスーパーグローバルの直接使用が検出されました。
Super_GETスーパーグローバルの直接使用が検出されました。
Super_POSTスーパーグローバルの直接使用が検出されました。
Super_REQUESTスーパーグローバルの直接使用が検出されました。
Super_SESSIONスーパーグローバルの直接使用が検出されました。
$GLOBALS Superglobalの直接使用が検出されました。
推薦:Cookie、セッション、またはリクエストデータを取得するには、対応するラッパーオブジェクトを使用します。
関数set_magic_quotes_runtime()は非推奨になりました
推薦:廃止された関数は、将来のバージョンからいつでも削除される可能性があるため、使用しないでください。[おそらくすべての非推奨の一般的なエラー]
Strpos関数の戻り値のテストには、同一の演算子===は使用されません
同一の演算子===は、stripos関数の戻り値のテストには使用されません
推薦:この関数の戻り値をテストするには、===演算子を使用します。
バッククォート文字列定数の誤った使用法。後ろの引用符は常に文字列の中にある必要があります。
推薦:[別の推奨事項はありません。私はこれがバッククォートを介してexecを防ぐことだと思います。]
[ClassName]クラスに_isallowed()ACLメソッドがありません。
推薦:特権の設定、管理、および処理を非常に慎重に管理します。ACLリソースはadminhtmlで定義する必要があります。各adminhtmlコントローラと_isallowed()メソッドのxmlファイルを実装する必要があります。
[ExceptionClassName]クラスの名前空間は指定されていません。
推薦:例外の名前空間を指定します。
PHP構文エラー:呼び出し時の参照渡しが削除されました
推薦:構文エラーを修正しました。[これは上記に付随しています。私は他のすべてのPHP構文エラーに対して同様の一般的なエラーが与えられていると思います]
Magento2デザイン違反の可能性があります。典型的なMagentoの1構造を検出しました。
推薦:[これには推奨事項はありませんが、Mage::blahやMage_Blah_Blah::blahのようなクラスの使用法が検出されたコードについて説明しています-これらはMagento1にのみ存在し、Magento2では機能しないクラスです。良いアイデアは、正規表現のためにあなたのM2拡張機能を検索することです Mage(\b|_)
M1使用法があるように事前に点検するため。]
resourceはPHP7の予約語です。
推薦:[別の推奨事項はありません。単に何か他のものに単語の名前を変更することは動作するはずです。このエラーはすべての予約語に存在すると思います。]
最初のPHPタグは、ファイル内の最初のコンテンツである必要があります
推薦:PHPの開始タグの前にあるすべての文字を削除します。
Die言語構造の使用は推奨されません。
Exit language constructの使用は推奨されません。
推薦:setBody()応答オブジェクトメソッドを使用する必要があります。
Echo language constructの使用は推奨されません。
Print language constructの使用は推奨されません。
推薦:Echoやheaderなどの使用を避けるために、拡張機能のアーキテクチャを変更する必要があります。クラスでは、responseオブジェクトのsetBody()メソッドを使用することを検討してください。
Eval()の使用は推奨されません
推薦:Eval()の使用は避けてください。
拡張機能が拒否される原因となるこれらのエラーとは異なり、警告は現在、拡張機能のコードを改善するのに役立つ礼儀としてのみ記載されています。あなたは警告のために技術レビューから拒否されることはありませんが、多くのものがあります。
もちろん、このルールは将来的に強化される可能性があり、codesnifferルールセットは常にレビューされているため、解決できる警告の数を確認することは常に良警告は、コードベースの体系的な問題を示すこともできます。
技術レビューからの拒否のいくつかの理由は、現在、オンラインレポートに表示されず、電子メールにのみ記載されています。
コピー&ペースト違反やマルウェアが検出されたようなものは、あなたの拡張機能が受け入れられなかったことを知らせる電子メールに表示されるメッ メールをよくお読みください.
これらの電子メールのアーカイブは現在、開発者ポータルからは表示されないため、読まずに削除したり、迷惑メールにファイルしたりすると、それらは消
Magentoのレベル1のレビュアーは、"この配列キー'sever'はおそらく'server'でなければならない"のように、あなたが知りたいと思っていた役に立つものや、"Magentoコアファイル全体をコピーしてクラスパスを変更した"のように、拒否の根拠や迅速に解決する方法についての提案など、この電子メールに余分な情報を入れることがあります。:代わりに、これをクラスの設定に置き換えることができます。"、または"いくつかのパブリック関数を変更するためだけにMagentoコアファイル全体をコピーしましたか?"、または"あなたはMagentoコアファイルをコピーしました。:代わりにプラグインを使用できます。"
これらを読んでおらず、codesnifferレポートを見るだけで、間違った問題を解決しようとする可能性があります。
に注意してください。 unescaped output detected
メッセージは、以下を使用して回避すべきではありません @escapeNotVerified
または @noEscape
コメント.これは、Magentoの将来のバージョンでは許可されない可能性があります。代わりに、次のいずれかを使用します:
- 単一引用符で囲まれた任意の静的文字列。
- インライン変数を含まない、二重引用符で囲まれた静的文字列。
- [おすすめ] からのエスケープメソッドのいずれかでエスケープされた値
\Magento\Framework\View\Element\AbstractBlock
(escapeHtml()
,escapeUrl()
,escapeQuote()
,escapeXssInUrl()
). - 数値型にキャストされた値(少なくともboolとint、おそらく他のもの?)
- 次のように、名前に"html"という単語を含む任意のメソッド呼び出し
printBannerHtml()
.これを乱用しないでください!あなたのことを確認してくださいblahHtml()
メソッドは実際にはすべての変数を正しくエスケープします。
エラー:
アンエスケープ出力検出
.phtmlファイル
のエラー<ul class="form-list" id="payment_form_<?php echo $code ?>" style="display:none;">
.
あなたは叫ぶ:
<ul class="form-list" id="payment_form_<?php /* @noEscape */ echo $code ?>" style="display:none;">
.