Зарезервированное ключевое слово в действии контроллера - Magento 2

9

Я работаю над концепцией сетки администратора. Я нашел один исходный код на github и проанализировал его.

Хотя я обнаружил, что URL отличается от объявления в макете компонента пользовательского интерфейса .

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

*/*Имеется в виду текущее имя фронта и путь действия, но я не смог найти New.phpв пути контроллера, но вместо этого NewAction.phpфайл присутствует.

Так что я в замешательстве. Как это автоматически сопоставляется с NewAction.phpфабричным методом в Model?

кто-нибудь может объяснить это?

Билал Усеан
источник

Ответы:

15

Есть некоторые слова, которые вы не можете использовать для имен классов.
В основном зарезервированные PHP такие слова , как new, public, static, ...

Чтобы преодолеть это и по-прежнему разрешать эти слова в URL, Magento добавляет суффикс, Actionкогда класс загружается автоматически.
Это означает, что newотображается на NewAction.php, publicна PublicAction.php.

Вы можете найти в классе \Magento\Framework\App\Router\ActionList(ветвь 2.3) список слов, имеющих такое поведение.

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

и вот код, который меняется newна NewAction.

Мариус
источник
1
отличное объяснение!
Билал Усеан
@Marius 2-я ссылка устарела.
sv3n