TYPO3:在动作控制器中,如何判断动作是在后端执行还是在前端执行?

Cha*_*net 1 typo3 extbase

这可能很简单,但我不知道在哪里可以找到答案。假设在前端和后端中使用相同的操作,或者假设我需要在initializeAction前端和后端中使用不同的行为,我如何检查该操作是从后端调用还是从前端调用?

顺便说一句,我正在使用extbase和 TYPO3 6.1.0。

bie*_*ior 5

可以通过常量确定( Builder生成的TYPO3_MODE示例预览)ext_tables.php

例如,这意味着您尝试从“外部”调用脚本:

if (!defined('TYPO3_MODE')) {
    die ('Access denied.');
}
Run Code Online (Sandbox Code Playgroud)

其他相当常见的情况是:

if (TYPO3_MODE == 'BE') {
    // this will execute only in the backend...
}
Run Code Online (Sandbox Code Playgroud)

无论如何,我真心建议为 FE 和 BE 创建单独的操作甚至控制器,如果您决定为两种模式使用一个操作,那么一旦您编写多个扩展,您就会发现它很不舒服。

对于 TYPO3 版本。11+

正如 Sybille Peters 提到的那样, constTYPO3_MODE已被弃用,因此请检查文档以了解最新版本中的其他可能性。您可以使用即:

if (ApplicationType::fromRequest($request)->isFrontend()) {
    ...
}
Run Code Online (Sandbox Code Playgroud)