Palabra clave reservada en la acción del controlador - Magento 2


9

Estoy trabajando en un concepto de red de administración. Encontré un código fuente de github y analicé ese.

Si bien encontré que la URL es diferente de la declaración en el diseño del componente de la interfaz de usuario .

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

*/*es el nombre actual actual y la ruta de acción, pero no pude encontrar New.phpen la ruta del controlador, pero en su lugar NewAction.phpestá presente el archivo

Entonces estoy confundido. ¿Cómo se mapea automáticamente este NewAction.phpmétodo de fábrica en Model?

¿Alguien puede explicar esto?

Respuestas:


15

Hay algunas palabras que no puede usar para los nombres de clase.
Básicamente las palabras reservadas como php new, public, static, ...

Para superar esto y aún permitir estas palabras en las URL, Magento agrega el sufijo Actioncuando la clase se carga automáticamente.
Esto significa que se newasigna a NewAction.php, publica PublicAction.php.

Puedes encontrar en la clase \Magento\Framework\App\Router\ActionList (rama 2.3) la lista de palabras que tienen este comportamiento.

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

y aquí está el código que cambia newaNewAction .


1
gran explicación!
Bilal Usean

@Marius 2nd link está desactualizado.
sv3n
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.