Palavra-chave reservada na ação do controlador - Magento 2


9

Estou trabalhando em um conceito de grade de administração. Encontrei um código fonte do github e analisei esse.

Embora eu tenha encontrado o URL, é diferente da declaração no layout do componente da interface do usuário .

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

*/*é o nome da frente atual médio e o caminho da ação, mas não consegui encontrar New.phpno caminho do controlador, mas o NewAction.phparquivo está presente.

Então, eu estou confuso. Como esse mapeamento é automaticamente NewAction.phpsemelhante ao método de fábrica no Model?

alguém pode explicar isso?

Respostas:


15

Existem algumas palavras que você não pode usar para nomes de classe.
Basicamente as palavras php reservados gosto new, public, static, ...

Para superar isso e ainda permitir essas palavras nos URLs, o Magento adiciona o sufixo Actionquando a classe é carregada automaticamente.
Isso significa que newmapeia para NewAction.php, publicpara PublicAction.php.

Você pode encontrar na classe \Magento\Framework\App\Router\ActionList(ramo 2.3) a lista de palavras que possuem esse 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 aqui está o código que muda newpara NewAction.


11
ótima explicação!
Bilal Usean

O link do @Marius 2nd está desatualizado.
Sv3n 13/05/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.