Parola chiave riservata nell'azione del controller - Magento 2


9

Sto lavorando a un concetto di griglia di amministrazione. Ho trovato un codice sorgente github e analizzato quello.

Mentre ho trovato l'URL è diverso dalla dichiarazione nel layout del componente dell'interfaccia utente .

<item name="url" xsi:type="string">*/*/new</item>

*/*è il nome corrente attuale e il percorso dell'azione, ma non sono riuscito a trovarlo New.phpnel percorso del controller ma è invece NewAction.phppresente il file.

Quindi sono confuso. In che modo questo si associa automaticamente al NewAction.phpmetodo di fabbrica simile nel modello?

qualcuno può spiegare questo?

Risposte:


15

Ci sono alcune parole che non puoi usare per i nomi delle classi.
In pratica le parole riservate php piace new, public, static, ...

Per ovviare a questo e consentire comunque queste parole negli URL, Magento aggiunge il suffisso Actionquando la classe viene caricata automaticamente.
Ciò significa che è newmappato a NewAction.php, publica PublicAction.php.

Puoi trovare nella classe \Magento\Framework\App\Router\ActionList(ramo 2.3) l'elenco delle parole che hanno questo comportamento.

protected $reservedWords = [
    'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const',
    'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty', 'enddeclare',
    'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final',
    'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'instanceof',
    'insteadof','interface', 'isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected',
    'public', 'require', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var',
    'while', 'xor',
];

e qui è il codice che cambia newin NewAction.


1
ottima spiegazione!
Bilal Usean,

Il link di @Marius 2nd non è aggiornato.
sv3n,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.