Magento Marketplace 기술 검토 보고서에서 발생한 경고/오류를 수정하는 방법은 무엇입니까?

magento.stackexchange https://magento.stackexchange.com/questions/111085

문제

새로운 Magento Marketplace를 사용하면 제출된 확장 프로그램이 승인되어 Marketplace를 통해 사용할 수 있도록 여러 검증 상태를 거칩니다.

그 중 하나는 기술 검토이며, 여기에서 다음과 같은 기술 보고서를 얻을 수 있습니다.

Marketplace Technical Report

보시다시피, 200개 이상의 경고가 저를 정말 겁나게 했습니다. 문서에서 사용할 수 있는 목록 외에 모든 경고를 해결하는 데 도움이 되는 리소스가 있습니까? http://docs.magento.com/marketplace/user_guide/extensions/review-code-validation.html?

도움이 되었습니까?

해결책

보고서를 검토한 후 한 시간 동안 다음 목록을 생각해 냈는데, 제 생각에 모든 사람에게 도움이 될 수 있을 것 같습니다.

더 많은 경고/오류가 발견되는 대로 계속 업데이트하도록 노력하겠습니다.

경고

줄이 80자를 초과합니다.X 문자를 포함합니다

또는

줄이 최대 한도인 100자를 초과했습니다.X 문자를 포함합니다

이것들은 제가 가장 많이 본 것입니다. 설명이 필요합니다. 깨끗하고 읽기 쉬운 코드를 유지하기 위해 코딩 줄을 작게 유지하는 것이 좋습니다.

함수 호출에서 쉼표 뒤에 공백이 없습니다.

매개변수를 받는 함수를 호출했지만 쉼표 뒤에 공백을 추가하지 않았습니다.예: strrchr($bla,".") 해야한다 strrchr($bla, ".")

예상되는 \"while (...) { \";\"(...) 동안 { \"을 찾았습니다.

예상되는 \"foreach (...) { \";\"foreach (...) { \"을 찾았습니다.

예상되는 \"if (...) { \";\"if (...) { \"을 찾았습니다.

예상되는 \"} 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\"에는 앞에 밑줄이 포함되어야 합니다.

protected 및 private 멤버 변수에 앞에 밑줄을 추가해야 합니다. $_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)가 10을 초과합니다.함수 리팩토링을 고려해보세요

순환적 복잡성에 익숙하지 않다면 다음 게시물을 읽어 보시기 바랍니다. https://pdependent.org/documentation/software-metrics/cyclomatic-complexity.html .이 경고는 기본적으로 함수에 루프와 조건이 너무 많다는 것을 의미합니다.

Magento 2에서는 직접 객체 인스턴스화를 권장하지 않습니다.

이는 클래스를 호출하여 객체를 직접 인스턴스화한다는 사실 때문에 발생합니다. 예를 들면 다음과 같습니다.

new \Zend_Filter_LocalizedToNormalized

종속성 주입이나 최후의 수단인 개체 관리자를 사용해야 합니다.

주석은 TODO 작업을 참조합니다.

귀하의 댓글 중 하나에 다음 내용이 포함되어 있습니다. @TODO 깃발.

항상 참이거나 거짓인 IF 문을 피하세요.

항상 참이거나 거짓인 것처럼 보이는 조건을 만들었습니다.

예를 들어:

$variable = "6";
...
// More code that doesn't change $variable
...
if ($variable)

오류

\"Class\" 클래스의 네임스페이스가 지정되지 않았습니다.

당신은 use Path\To\Class; 수업 시작 시에 하는 말.

다른 팁

MEQP1 또는 MEQP2 규칙 세트(Magento 버전에 따라 다름)와 함께 Codesniffer를 사용하면 Magento 규칙 세트에 대한 아이디어를 얻을 수 있습니다. https://github.com/magento/marketplace-eqp/tree/master/

이 규칙 세트와 Marketplace의 제출 프로세스에서 실행되는 규칙 세트는 항상 완벽하게 동기화되지는 않습니다(물론 이것이 이상적이긴 하지만). 따라서 Github의 최신 버전을 통과하더라도 코드니퍼 오류로 인해 거부될 수 있습니다.

보다 일반적인 "심각도-10" 오류(확장 프로그램이 거부되는 유일한 오류)와 나열된 권장 사항은 다음과 같습니다.

PHP 파일 끝에는 닫는 태그가 허용되지 않습니다.

추천:PHP 닫는 태그를 제거합니다.

통화 시간 참조별 통화는 금지됩니다.

추천:PHP 5의 참조 문서를 읽고 코드를 리팩터링하세요.참고자료: http://php.net/manual/en/언어.references.pass.php

$_ENV Superglobal의 직접 사용이 감지되었습니다.

$_GET Superglobal을 직접 사용하는 것이 감지되었습니다.

$_POST Superglobal을 직접 사용하는 것이 감지되었습니다.

$_REQUEST Superglobal의 직접 사용이 감지되었습니다.

$_SESSION Superglobal의 직접 사용이 감지되었습니다.

$GLOBALS Superglobal을 직접 사용하는 것이 감지되었습니다.

추천:쿠키, 세션 또는 요청 데이터를 얻으려면 해당 래퍼 객체를 사용하세요.

set_magic_quotes_runtime() 함수는 더 이상 사용되지 않습니다.

추천:더 이상 사용되지 않는 기능은 향후 버전에서 언제든지 제거될 수 있으므로 사용해서는 안 됩니다.[아마도 모든 지원 중단에 대한 일반적인 오류]

strpos 함수의 반환 값을 테스트하는 데 동일한 연산자 ===가 사용되지 않습니다.

Stripos 함수의 반환 값을 테스트하는 데 동일한 연산자 ===가 사용되지 않습니다.

추천:이 함수의 반환 값을 테스트하려면 === 연산자를 사용하세요.

역따옴표 문자열 상수의 사용법이 잘못되었습니다.역따옴표는 항상 문자열 안에 있어야 합니다.

추천:[별도의 추천은 없습니다.나는 이것이 역따옴표를 통해 exec를 방지하는 것이라고 생각합니다.]

[ClassName] 클래스에 _isAllowed() ACL 메서드가 누락되었습니다.

추천:권한 설정, 관리, 처리를 매우 신중하게 관리하세요.각 adminhtml 컨트롤러마다 ACL 리소스를 adminhtml.xml 파일에 정의하고 _isAllowed() 메소드를 구현해야 합니다.

[ExceptionClassName] 클래스의 네임스페이스가 지정되지 않았습니다.

추천:예외 네임스페이스를 지정합니다.

PHP 구문 오류:참조에 의한 호출 시간 전달이 제거되었습니다.

추천:구문 오류를 수정하세요.[위의 내용과 함께 제공됩니다.다른 모든 PHP 구문 오류에 대해서도 비슷한 일반 오류가 발생한다고 생각합니다.]

Magento 2 디자인 위반 가능성이 있습니다.일반적인 Magento 1 구성이 감지되었습니다.

추천:[권장 사항은 없지만 Mage::blah 또는 Mage_blah_blah::blah와 같은 클래스 사용이 감지되는 코드를 설명합니다. 이러한 클래스는 Magento 1에만 존재하며 Magento 2에서는 작동하지 않습니다.좋은 아이디어는 M2 확장자에서 정규식을 검색하는 것입니다. Mage(\b|_) M1 사용량을 사전 확인합니다.]

리소스는 PHP 7의 예약어입니다.

추천:[별도의 추천은 없습니다.단순히 단어의 이름을 다른 것으로 바꾸는 것만으로도 효과가 있습니다.이 오류는 모든 예약어에 존재하는 것 같습니다.]

여는 PHP 태그는 파일의 첫 번째 콘텐츠여야 합니다.

추천:PHP 여는 태그 앞의 모든 문자를 제거합니다.

언어 구성의 사용은 권장되지 않습니다.

종료 언어 구성을 사용하는 것은 권장되지 않습니다.

추천:setBody() 응답 객체 메소드를 사용해야 합니다.

에코 언어 구성을 사용하는 것은 권장되지 않습니다.

인쇄 언어 구성의 사용은 권장되지 않습니다.

추천:에코, 헤더 등의 사용을 방지하려면 확장 아키텍처를 변경해야 합니다.클래스에서는 응답 객체의 setBody() 메서드를 사용하는 것이 좋습니다.

eval() 사용은 권장되지 않습니다.

추천:eval()을 사용하지 마십시오.


확장 프로그램이 거부되는 이러한 오류와 달리, 경고는 현재 확장 프로그램의 코드를 개선하는 데 도움이 되도록 단지 편의상 나열됩니다.경고가 많다고 해서 기술 검토가 거부되는 것은 아닙니다.

물론 이 규칙은 향후 강화될 수 있으며 코드스니퍼 규칙 세트는 지속적으로 검토되고 있으므로 해결할 수 있는 경고 수를 확인하는 것은 항상 좋은 계획입니다.경고는 코드베이스의 시스템적 문제를 나타낼 수도 있습니다.


기술 검토에서 거부된 일부 이유는 현재 온라인 보고서에 표시되지 않으며 이메일로만 제공됩니다.

복사-붙여넣기 위반 및 감지된 맬웨어와 같은 경우에는 확장 프로그램이 승인되지 않았음을 알리는 메시지만 이메일에 표시됩니다. 이메일을 주의 깊게 읽어보세요.

이러한 이메일의 아카이브는 현재 개발자 포털에 표시되지 않으므로 읽지 않고 삭제하거나 정크로 분류하면 사라집니다.

Magento의 레벨 1 검토자는 때때로 이 이메일에 "이 배열 키 '서버'는 아마도 '서버'여야 합니다"와 같이 귀하가 알고 싶어할 것이라고 생각하는 유용한 정보 또는 거부 및 제안에 대한 근거 등의 추가 정보를 넣습니다. "전체 Magento 코어 파일을 복사하고 클래스 경로만 변경했습니다.대신 이를 클래스 기본 설정으로 대체할 수 있습니다." 또는 "몇 가지 공개 기능을 변경하기 위해 전체 Magento 코어 파일을 복사했습니다.대신 플러그인을 사용할 수 있습니다."

이 내용을 읽지 않고 코드스니퍼 보고서만 보면 잘못된 문제를 해결하려고 시도하게 될 수도 있습니다.


참고 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;">
.

http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html#escape-functions-for-templates / P>

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top