W nowym Magento Marketplace przesłane rozszerzenie przechodzi kilka stanów sprawdzania poprawności w celu zatwierdzenia i udostępnienia za pośrednictwem Marketplace.
Jednym z nich jest przegląd techniczny, z którego można uzyskać raport techniczny podobny do następującego:
Jak widać, ponad 200 ostrzeżeń trochę mnie przeraziło, czy istnieje jakiś zasób, który pomoże naprawić każde ostrzeżenie oprócz listy dostępnej w dokumentacji: http://docs.magento.com/marketplace/user_guide/extensions/ review-code-validation.html ?
magento2
extensions
marketplace
Raphael at Digital Pianism
źródło
źródło
Odpowiedzi:
Po godzinie przeglądania raportu wymyśliłem następującą listę, która może być pomocna dla wszystkich, o których myślę.
Postaram się go aktualizować, gdy tylko znajdę więcej ostrzeżeń / błędów:
Ostrzeżenia
Lub
Te są te, które widziałem najbardziej, są oczywiste, dobrą praktyką jest utrzymywanie małych linii kodowania, aby zachować czysty i czytelny kod.
Wywołałeś funkcję, która odbiera parametry i nie dodałeś spacji po przecinku. Przykład:
strrchr($bla,".")
powinien byćstrrchr($bla, ".")
Oznacza to, że zwróciłeś wiersz przed nawiasem otwierającym tych instrukcji PHP.
Przykład złej składni z instrukcją if / else:
Powinno być
Najczęściej dzieje się to w konstruktorze, w którym deklarujesz coś takiego:
Powinno być:
Zdarza się najczęściej na początku pliku, jest to spowodowane sposobem, w jaki IDE koduje znak powrotu.
Każda zmienna musi używać formatu wielbłąda, tak też
$your_variable
powinno być$yourVariable
Unikaj używania liczb w swoich zmiennych
Nie powinieneś używać wbudowanych struktur kontrolnych, takich jak:
Powinieneś użyć:
Podczas deklarowania klasy zwróciłeś wiersz:
Powinieneś trzymać nawias otwierający w tej samej linii:
Powinieneś dodać wiodący znak podkreślenia do chronionych i prywatnych zmiennych członka:
$_yourVariable
W przeciwieństwie do tych dwóch, jeśli dodasz podkreślenie do swojej zmiennej publicznej, możesz uzyskać:
Przekazałeś parametr do metody, ale nigdy go nie używasz.
Dodano zbyt dużo wcięcia do parametrów deklaracji funkcji:
Powinno być:
Przesłaniasz metodę bez dodawania modyfikacji, przykład:
Używasz
load()
metody wewnątrz pętli, która nie jest zalecana i należy jej unikać.Najprawdopodobniej twój kod wygląda następująco:
Jeśli ładujesz model w pętli, to jest naprawdę dość źle pod względem wydajności. Jeśli potrzebujesz tylko pobrać kilka atrybutów, powinieneś użyć kolekcji.
Jeśli nie znasz się na złożoności cyklicznej, sugeruję przeczytanie tego postu: https://pdepend.org/documentation/software-metrics/cyclomatic-complexity.html . To ostrzeżenie zasadniczo oznacza, że w Twojej funkcji jest zbyt wiele pętli i warunków.
Jest to spowodowane tym, że tworzysz obiekt bezpośrednio, wywołując klasę, na przykład:
Należy użyć wstrzykiwania zależności lub w ostateczności, menedżera obiektów.
Jeden z twoich komentarzy zawiera następującą
@TODO
flagę.Utworzyłeś warunek, który wydaje się zawsze prawdziwy lub fałszywy.
Na przykład:
Błędy
Brakuje
use Path\To\Class;
oświadczenia na początku zajęć.źródło
You should keep the opening brace on the same line:
czy nie jest na odwrót?Używanie Codesniffer z zestawem reguł MEQP1 lub MEQP2 (w zależności od wersji Magento) da ci wyobrażenie o zestawie reguł Magento: https://github.com/magento/marketplace-eqp/tree/master/
Ten zestaw reguł i ten uruchomiony w procesie przesyłania Marketplace NIE zawsze są idealnie zsynchronizowane (choć oczywiście jest to idealny), więc możesz zostać odrzucony za błędy w CodeCffer, nawet jeśli przejdzie najnowszą wersję na Github.
Niektóre z najczęstszych błędów „dotkliwość-10” (jedyne błędy, za które rozszerzenie zostanie odrzucone), a także ich wymienione rekomendacje, obejmują:
Zalecenie: Usuń tag zamykający PHP.
Zalecenie: Przeczytaj dokumentację dotyczącą referencji w PHP 5 i przebuduj kod. Odnośniki: http://php.net/manual/en/language.references.pass.php
Zalecenie: Użyj odpowiednich obiektów opakowania w celu uzyskania plików cookie, danych sesji lub żądania.
Zalecenie: Nie należy używać przestarzałych funkcji, ponieważ można je w dowolnym momencie usunąć z przyszłej wersji. [Prawdopodobnie ogólny błąd dla wszystkich wycofań]
Zalecenie: Użyj operatora === do przetestowania wartości zwracanej tej funkcji.
Zalecenie: [brak oddzielnej rekomendacji. Wyobrażam sobie, że to ma zapobiec egzekucji poprzez cytaty.]
Zalecenie: bardzo ostrożnie zarządzaj ustawieniami, zarządzaniem i obsługą uprawnień. Zasób ACL należy zdefiniować w pliku adminhtml.xml dla każdego kontrolera adminhtml i zaimplementować metodę _isAllowed ().
Zalecenie: Określ przestrzeń nazw wyjątków.
Zalecenie: Napraw błąd składniowy. [Ten towarzyszy powyższemu. Wyobrażam sobie, że podobny błąd ogólny występuje dla wszystkich innych błędów składniowych PHP]
Zalecenie: [Nie zawiera żadnych zaleceń, ale opisuje kod, w którym wykrywane jest użycie klas takich jak Mage :: blah lub Mage_blah_blah :: blah - są to klasy, które istnieją tylko w Magento 1 i nie będą działać w Magento 2. Dobrym pomysłem jest poszukaj wyrażenia regularnego w rozszerzeniu M2,
Mage(\b|_)
aby wstępnie sprawdzić użycie M1.]Zalecenie: [Brak oddzielnej rekomendacji. Po prostu zmiana nazwy słowa na coś innego powinna działać. Wyobrażam sobie, że ten błąd występuje dla wszystkich zastrzeżonych słów.]
Zalecenie: Usuń wszystkie znaki przed tagiem otwierającym PHP.
Zalecenie: należy użyć metody obiektu odpowiedzi setBody ().
Zalecenie: Należy zmienić architekturę rozszerzenia, aby uniknąć użycia echa, nagłówka itp. W klasach, należy rozważyć użycie metody setBody () obiektu odpowiedzi.
Zalecenie: Unikaj używania eval ().
W przeciwieństwie do tych błędów, które powodują odrzucenie twojego rozszerzenia, ostrzeżenia są obecnie wymienione jedynie jako uprzejmość, aby pomóc poprawić kod twojego rozszerzenia. NIE zostaniesz odrzucony z przeglądu technicznego pod kątem ostrzeżeń, jakkolwiek jest ich wiele.
Oczywiście ta reguła może zostać w przyszłości zaostrzona, a zestaw reguł CodeNeffer jest stale sprawdzany, więc sprawdzenie, ile ostrzeżeń można rozwiązać, jest zawsze dobrym planem. Ostrzeżenia mogą również wskazywać na problemy systemowe z bazą kodu.
Niektóre powody odrzucenia przeglądu technicznego nie pojawiają się obecnie w raporcie online i są podane tylko w wiadomości e-mail.
Wykryte naruszenia kopiuj-wklej i wykryte złośliwe oprogramowanie będą wyświetlać tylko wiadomości otrzymane w wiadomości e-mail z informacją, że Twoje rozszerzenie nie zostało zaakceptowane, więc przeczytaj je uważnie .
Archiwum tych e-maili nie jest obecnie widoczne z portalu dla programistów, więc jeśli usuniesz je bez czytania lub zrzucisz do śmieci, to znikną.
Recenzenci poziomu 1 Magento czasami umieszczają dodatkowe informacje w tym e-mailu, albo tylko pomocne rzeczy, o których myśleli, że powinieneś chcieć wiedzieć, na przykład „ten klucz tablicy„ serwer ”prawdopodobnie powinien być„ serwer ”, lub uzasadnienie ich odrzucenia i sugestii jak szybko go rozwiązać, na przykład: „Skopiowałeś cały plik podstawowy Magento i właśnie zmieniłeś ścieżkę klasy: możesz zastąpić to ustawieniem preferencji klasy.” lub „Skopiowałeś cały plik podstawowy Magento, aby zmienić kilka funkcje publiczne: możesz użyć do tego wtyczek. ”
Jeśli ich nie przeczytasz i po prostu spojrzysz na raport Codeniffer, możesz spróbować rozwiązać nieprawidłowe problemy.
Pamiętaj, że
unescaped output detected
NIE należy dodawać wiadomości za pomocą@escapeNotVerified
lub@noEscape
. Prawdopodobnie zostanie to niedozwolone w przyszłych wersjach Magento. Zamiast tego użyj jednej z następujących opcji:\Magento\Framework\View\Element\AbstractBlock
(escapeHtml()
,escapeUrl()
,escapeQuote()
,escapeXssInUrl()
).printBannerHtml()
. Nie nadużywaj tego! Upewnij się, że twojablahHtml()
metoda naprawdę poprawnie unika wszystkich zmiennych.źródło
Błąd:
Błąd w pliku .phtml
Krzyczysz:
Zapoznaj się z tematem Zabezpieczenia XSS dla http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html#escape-functions-for-templates
źródło
@noEscape
i@escapeNotValidated
w ten sposób: jeśli to zrobisz, prawdopodobnie zostaną one wycofane, a następnie odrzucone przez system MEQP. U dołu mojej odpowiedzi znajduje się wiele lepszych sposobów na ucieczkę danych.