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:

MarketplaceRapporto tecnico

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 ?

È stato utile?

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.

.

L'uso di EVAL () è scoraggiato <

/ P >.

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 metodo blahHtml() 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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top