Mot-clé réservé dans l'action du contrôleur - Magento 2

9

Je travaille sur un concept de grille d'administration. J'ai trouvé un code source github et l' ai analysé.

Bien que je trouve que l'URL est différente de la déclaration dans la disposition des composants de l'interface utilisateur .

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

*/*est le frontname et le chemin d'action actuels , mais je n'ai pas pu trouver New.phpdans le chemin du contrôleur mais le NewAction.phpfichier est à la place .

Je suis donc confus. Comment cela correspond-il automatiquement à la NewAction.phpméthode d'usine dans Model?

quelqu'un peut-il expliquer cela?

Bilal Usean
la source

Réponses:

15

Il y a des mots que vous ne pouvez pas utiliser pour les noms de classe.
Fondamentalement , les mots php réservés aiment new, public, static, ...

Pour surmonter cela et autoriser ces mots dans les URL, Magento ajoute le suffixe Actionlorsque la classe est chargée automatiquement.
Cela signifie que newcorrespond à NewAction.php, publicà PublicAction.php.

Vous pouvez trouver dans la classe \Magento\Framework\App\Router\ActionList(branche 2.3) la liste des mots qui ont ce comportement.

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',
];

et est ici le code qui change newà NewAction.

Marius
la source
1
grande explication!
Bilal Usean
@Marius 2nd link n'est pas à jour.
sv3n