Come risolvere Avvertenze / Errori sollevati dal Rapporto tecnico del Marketplace Magento?
-
29-09-2020 - |
Domanda
Con il nuovo marketplace magento, un'estensione presentata passa attraverso diversi stati di convalida per essere approvati e disponibili tramite il mercato.
Uno di questi è la revisione tecnica, da cui è possibile ottenere un rapporto tecnico come quanto segue:
Come puoi vedere, 200+ Avvertenze Kindsa spaventate dall'inferno da me, c'è qualche risorsa per aiutare a fissare ogni avvertimento a parte la lista disponibile nei documenti: http://docs.magento.com/marketplace/user_guide/extensions/review-code-validation.html ?
Soluzione
Dopo un'ora attraversando il rapporto che ho inventato il seguente elenco, potrebbe essere utile per tutti quelli che penso.
Proverò a tenerlo aggiornato non appena trovo più avvertimenti / errori:
Avvertenze
.Line supera 80 caratteri; Contiene x caratteri
o
.Line supera il limite massimo di 100 caratteri; Contiene x caratteri
Quelli sono quelli che ho visto di più, sono auto esplicativi, è una buona pratica per mantenere le linee di codifica per mantenere un codice pulito e leggibile.
.Nessun spazio trovato dopo la virgola in funzione Call
Hai chiamato una funzione che riceve parametri e non aggiungeva uno spazio dopo la virgola. Esempio: strrchr($bla,".")
dovrebbe essere strrchr($bla, ".")
.previsto \ "while (...) {\n\"; trovato \ "while (...) \n{\n\"
previsto \ "foreach (...) {\n\"; trovato \ "foreach (...) \n{\n\"
previsto \ "se (...) {\n\"; trovato \ "se (...) \n{\n\"
previsto \ "} else {\n\"; trovato \ "} \nElse {\n\"
Ciò significa che hai restituito una linea prima della staffa di apertura di quelle dichiarazioni PHP.
Esempio di una brutta sintassi con un'istruzione IF / Else:
if (true)
{
}
else
{
}
.
dovrebbe essere
if (true) {
} else {
}
.
.La parentesi di chiusura e la bretella di apertura di una dichiarazione della funzione multilinea deve essere sulla stessa riga
La maggior parte delle volte, succede nel costruttore in cui dichiari qualcosa del genere:
public function __construct(
ProductFactory $productFactory,
Test $test
)
{
}
.
considerando che dovrebbe essere:
public function __construct(
ProductFactory $productFactory,
Test $test
) {
}
.
.
il carattere di fine linea non è valido; Previsto \ "\n\" ma trovato \ "\ r \n\"
succede la maggior parte del tempo all'inizio del file, è causato dal modo in cui il tuo IDE codifica il carattere di ritorno.
.Variabile \ "Your_Variable \" non è in formato Valid Camel Caps
Ogni variabile deve utilizzare il formato Caps Camel, quindi $your_variable
deve essere $yourVariable
.variabile \ "one2three \" contiene numeri ma questo è scoraggiato
Evita di usare numeri nelle vostre variabili
.Le strutture di controllo in linea non sono consentite
Non dovresti usare strutture di controllo in linea come:
else $test = true;
.
Dovresti usare:
else {
$test = true;
}
.
.Apertura Brace of a Class Deve essere sulla linea dopo la definizione
Hai restituito una linea quando dichiara una classe:
class Test
{
.
Dovresti mantenere il tutore di apertura sulla stessa riga:
class Test {
.
.Variabile membro privato \ "YourVariable \" deve contenere un sottolineatura leader
Variabile membro protetto \ "YourVariable \" deve contenere un punteggio leader
Dovresti aggiungere un leader di sottolineatura alle vostre variabili di membro protetta e privata: $_yourVariable
A partire da questi due, se aggiungi un sottolineatura nella tua variabile pubblica è possibile ottenere:
.Variabile del membro pubblico \ "_ YourVariable \" non deve contenere un sottoscritto leader.
Il parametro metodo $ BLA non viene mai utilizzato
Hai superato un parametro su un metodo ma non lo usi mai.
.Dichiarazione della funzione multi-linea non rientrata correttamente; Previsto 8 spazi ma trovato x
Hai aggiunto troppa indentazione ai parametri di dichiarazione della funzione:
public function __construct(ProductRepository $productRepository,
ListsInterface $listsInterface,
Data $helper
) {
.
dovrebbe essere:
public function __construct(ProductRepository $productRepository,
ListsInterface $listsInterface,
Data $helper
) {
.
.Possibile metodo inutile L'impegno rilevato
Sta prendendo un metodo senza aggiunta di modifiche, esempio:
public function __construct(Context $context) {
parent::__construct($context);
}
.
.Modello Metodo LSD Load () rilevato in loop
Stai usando il metodo load()
all'interno di un loop che non è consigliato e deve essere evitato.
Molto probabilmente il tuo codice sembra questo:
foreach(...) {
$model->load();
}
.
Se stai caricando un modello in un ciclo è davvero piuttosto brutto in termini di prestazioni. Se hai solo bisogno di recuperare alcuni attributi, è necessario utilizzare le raccolte.
.Funzione La complessità ciclomatica (X) Exceeeds 10; Considera il refactoring della funzione
Se non hai familiarità con la complessità ciclomatica ti suggerisco di avere una lettura in questo post: https://pdepend.org/documentation/software-metrics/cyclomatic-complexity.html . Questo avvertimento significa fondamentalmente
che ci sono troppi loop e condizioni nella tua funzione..L'istanziazione dell'oggetto diretto è scoraggiare in Magento 2
È causato dal fatto che stai istanziando un oggetto direttamente chiamando la classe, ad esempio:
new \Zend_Filter_LocalizedToNormalized
.
Dovresti usare l'iniezione di dipendenza o un'ultima risorsa, il gestore dell'oggetto.
.Commenti Fare riferimento a un'attività TODO
Uno dei tuoi commenti contiene il seguente flag @TODO
.
.Evita se dichiarazioni sempre true o false
Hai creato una condizione che sembra essere sempre vera o falsa.
Ad esempio:
$variable = "6";
...
// More code that doesn't change $variable
...
if ($variable)
.
Errori
.Spazio Namespace per la classe \ "Class \" non è specificato.
Ti manca l'istruzione use Path\To\Class;
all'inizio della tua classe.
Altri suggerimenti
Utilizzando il codesniffer con il set di regole MEQP1 o Meqp2 (a seconda della versione di Magento) ti darà un'idea del punto di regolazione del magento: https://github.com/magento/marketplace-eqp/tree/master/
Questo punto di regole e quello in esecuzione sul processo di invio del mercato non è sempre perfettamente in sincronia (anche se ovviamente, questo è l'ideale), quindi potresti essere respinto per gli errori di codici condivisi anche se passa l'ultima versione su GitHub. Alcuni dei più comuni errori "Secrety-10" (gli unici errori della propria estensione saranno respinti) e le loro raccomandazioni quotate includono:
.Un tag di chiusura non è consentito alla fine di un file PHP
Consigli: Rimuovere il tag di chiusura PHP.
.Le chiamate di riferimento pass-by-time chiamate sono vietate
Raccomandazione: leggi la documentazione sui riferimenti in PHP 5 e refactor il tuo codice. Riferimenti: http://php.net/manual/en/language.references.pass .php
.Uso diretto di $ _ENV SuperGlobal rilevato.
Uso diretto di $ _Get SuperGlobal rilevato.
Uso diretto di $ _Post SuperGlobal rilevato.
Uso diretto di $ _request SuperGlobal rilevato.
Uso diretto di $ _Session SuperGlobal rilevato.
Uso diretto di $ Global SuperGlobal rilevato.
Consigli: Utilizzare oggetti involucri corrispondenti per ottenere cookie, sessione o richiedere dati.
.Funzione Set_Magic_quotes_Runtime () è stato deprecato
Raccomandazione: Le funzioni deprecate non devono essere utilizzate in quanto possono essere rimosse in qualsiasi momento da una versione futura. [Probabilmente un errore generico per tutte le deprecazioni]
.Operatore identico=== non è utilizzato per testare il valore di ritorno della funzione Strpos
Operatore identico=== non è utilizzato per testare il valore di ritorno della funzione Stripos
Raccomandazione: utilizzare l'operatore=== per testare il valore di ritorno di questa funzione.
.Utilizzo errato della costante della stringa del preventivo posteriore. Le quotazioni indietro dovrebbero essere sempre all'interno di stringhe.
Raccomandazione: [Nessuna raccomandazione separata. Immagino che questo è quello di prevenire Exec attraverso backquoti.]
.Manca il metodo ACL _isallowed () nella classe [CLASSNAME].
Raccomandazione: Gestire molto attentamente l'impostazione, la gestione e la gestione dei privilegi. La risorsa ACL deve essere definita nel file adminhtml.xml per ciascun controller adminhtml e il metodo _isallowed () deve essere implementato.
.Namespace per la classe [ExceptClassName] non è specificato.
Raccomandazione: specificare lo spazio dei nomi di eccezione.
.Errore di sintassi PHP PHP: il passaggio del tempo di chiamata è stato rimosso
Raccomandazione: correzione errore di sintassi. [Questo accompagna quanto sopra. Immagino che venga fornito un errore generico simile per tutti gli altri errori di sintassi PHP]
.Possibile violazione del design magento 2. Rilevato tipico magento 1 costruzione.
Raccomandazione: [Questo non viene fornito con raccomandazione, ma descrive il codice in cui l'utilizzo della classe come Mage :: Blah o Mage_blah_blah :: Blah è rilevato - Queste sono classi che esistono solo in Magento 1 e non funzionerà in Magento 2. Un bene L'idea è quella di cercare l'estensione M2 per il Mage(\b|_)
Regex per pre-controllare gli utilizzo di M1.]
.Resource è una parola riservata in PHP 7.
Raccomandazione: [Nessuna raccomandazione separata. Basta rinominare la parola a qualcos'altro dovrebbe funzionare. Immagino che questo errore esiste per tutte le parole riservate.]
.Il tag PHP di apertura deve essere il primo contenuto nel file
Consigli: Rimuovere tutti i caratteri prima del tag di apertura PHP.
.L'uso del costrutto della lingua dello stadio è scoraggiato.
L'uso del costrutto della lingua di uscita è scoraggiato.
Consigli: Deve essere utilizzato il metodo dell'oggetto di risposta SETBY ().
.L'uso del costrutto della lingua Echo è scoraggiato.
L'uso del costrutto della lingua di stampa è scoraggiato.
Raccomandazione: l'architettura dell'estensione deve essere modificata per evitare l'utilizzo di eco, intestazione ecc. In classi, considerare l'utilizzo di SETBody () Metodo dell'oggetto di risposta.
./ P >.L'uso di EVAL () è scoraggiato <
Raccomandazione: Evitare l'utilizzo di Eval ().
.
A differenza di questi errori, che fanno respingere la tua estensione, gli avvertimenti sono attualmente elencati semplicemente come cortesia, per aiutare a migliorare il codice dell'estensione. Non sarai rifiutato dalla revisione tecnica per gli avvertimenti, per quanto molti ci sono.
Naturalmente, questa regola può essere serrata in futuro e il regime di codesniffer è in costante revisione, quindi vedendo quanti avvertimenti puoi risolvere è sempre un buon piano. Gli avvertimenti possono anche indicare problemi sistemici con la tua base.
.
Alcune ragioni del rifiuto della revisione tecnica non vengono attualmente visualizzate sul report online e sono fornite solo nell'e-mail.
Le cose come le violazioni di copia-incollano e il malware rilevato avranno solo messaggi mostrati nell'e-mail che ti permette di sapere che la tua estensione non è stata accettata, quindi Leggi attentamente l'e-mail .
Un archivio di queste e-mail non è attualmente visibile dal portale dello sviluppatore, quindi se li elimini senza leggere, o archiviali in junk, allora sono andati via.
Le commissioni di livello 1 di P> Magento a volte mette ulteriori informazioni in questa email, o semplicemente cose utili che pensavano che potresti voler sapere, come "questa chiavetta" Sever "dovrebbe probabilmente essere" server "" o i razionali per loro Rifiuto e suggerimenti su come risolverlo rapidamente, come "Hai copiato un intero file Magento Core e ho appena cambiato il classPath: è possibile sostituirlo con un'impostazione di preferenza di classe.", o "Hai copiato un intero file magento solo per cambiare Un paio di funzioni pubbliche: puoi utilizzare i plugin per questo. "
Se non leggi questi, e guarda il rapporto CodeSniffer, potresti finire per provare a risolvere i problemi errati.
.
Si noti che il messaggio unescaped output detected
non deve essere schivato utilizzando i commenti @escapeNotVerified
o @noEscape
. Questo probabilmente sarà non consentito nelle versioni future di Magento. Invece, usa uno dei seguenti:
- .
- qualsiasi stringa statica in virgolette singole.
- Una stringa statica in virgolette doppie, senza variabili in linea.
- [Consigliato] Un valore fuggito con uno dei metodi di fuga da
\Magento\Framework\View\Element\AbstractBlock
(escapeHtml()
,escapeUrl()
,escapeQuote()
,escapeXssInUrl()
). - Un valore un valore su un tipo numerico (almeno bool e int, forse altri?)
- Qualsiasi metodo chiama con la parola "html" nel nome, come
printBannerHtml()
. Non abusare di questo! Assicurati che il tuo metodoblahHtml()
veramente sfuggire correttamente a tutte le variabili.
Errore:
.Uscita senzaescapeta rilevata
Errore nel file .phtml
<ul class="form-list" id="payment_form_<?php echo $code ?>" style="display:none;">
.
Usa Uso:
<ul class="form-list" id="payment_form_<?php /* @noEscape */ echo $code ?>" style="display:none;">
.
Riferire i modelli Sicurezza XSS per http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html#ate-Functions-for-Templates .