如何:在控制器上下文之外从php访问打字脚本变量?

如何:在控制器上下文之外从php访问打字脚本变量?,php,controller,typo3,typoscript,extbase,Php,Controller,Typo3,Typoscript,Extbase,我想从全局php脚本访问一些打字脚本变量,这样我就不会有控制器上下文来处理。通常我从控制器内部获取这些变量,代码如下: $this->settings['HallURL']; 如果不是在控制器上下文中,如何获得相同的内容?变量在my extension setup.txt中定义如下: plugin.tx_bpsmessagecentre { settings { # cat=plugin.tx_bpsmessagecentre//a; type=string; l

我想从全局php脚本访问一些打字脚本变量,这样我就不会有控制器上下文来处理。通常我从控制器内部获取这些变量,代码如下:

$this->settings['HallURL'];
如果不是在控制器上下文中,如何获得相同的内容?变量在my extension setup.txt中定义如下:

plugin.tx_bpsmessagecentre {
    settings {
        # cat=plugin.tx_bpsmessagecentre//a; type=string; label=Default URL
        HallURL= Defualt URL
    }
}
谢谢

PS:我尝试过这个,但它只在执行扩展名为bpscore时有效,但我希望能够从多个扩展名访问相同的变量(在bpscore的setup.settings中设置)

$GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpscore."]["settings."]["HallURL"];
PS:似乎没有很好的方法来做到这一点,所以这就是我目前要做的- 在每个扩展中,我在设置文件中声明公共变量,如下所示:

   plugin.tx_bpsmessagecentre {
        settings {
            # cat=plugin.tx_bpsmessagecentre//a; type=string; label=Default URL
            HallURL= {$siteURL}
        }
    }
siteURL = mydomain.com
typo3包含的通用TS脚本定义了如下变量:

   plugin.tx_bpsmessagecentre {
        settings {
            # cat=plugin.tx_bpsmessagecentre//a; type=string; label=Default URL
            HallURL= {$siteURL}
        }
    }
siteURL = mydomain.com
然后在global.php中,我定义了如下函数:

/**
 * getSettings
 * @param string $plugin  the name of the plugin whose settings to get
 * @return array
 */
function getSettings($plugin='tx_bpscore'){
    return $GLOBALS['TSFE']->tmpl->setup['plugin.'][$plugin."."]["settings."];
}
$settings = getSettings('tx_something'); 
$url = $settings["HallURL"];
我只是从任何分机的任何地方打电话,就像这样:

/**
 * getSettings
 * @param string $plugin  the name of the plugin whose settings to get
 * @return array
 */
function getSettings($plugin='tx_bpscore'){
    return $GLOBALS['TSFE']->tmpl->setup['plugin.'][$plugin."."]["settings."];
}
$settings = getSettings('tx_something'); 
$url = $settings["HallURL"];
当然,如果我在控制器上下文中,我可以跳过它,直接调用

$this->settings["HallURL"];
当然,这其中的一个问题是,如果我从global.php文件本身调用设置,我必须做一些像这样的黑客操作:

/** 
 * add a  part for each extension
 */
function getDebugb( ){
    if(isset($GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpscore."]["settings."]["DEBUGB"]))
    return $GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpscore."]["settings."]["DEBUGB"];
    if(isset($GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpsmessagecentre."]["settings."]["DEBUGB"]))
    return $GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpsmessagecentre."]["settings."]["DEBUGB"];
    if(isset($GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpscoupons."]["settings."]["DEBUGB"]))
    return $GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpscoupons."]["settings."]["DEBUGB"];
    return "";

最简单的方法是在所有扩展中都有一个共享设置,例如:

lib.tx_extension_share = {}
tx_extension.settings.share =< lib.tx_extension_share
lib.tx_扩展_共享={}
tx\u extension.settings.share=
您还可以询问
$GLOBALS['TSFE']->tmpl->setup['tx_extension.]['key']

但请记住,从概念角度(OOP、SoC)来看,这并不干净。

为此使用ConfigurationManager

\TYPO3\CMS\Extbase\Configuration\ConfigurationManager->getConfiguration
尝试三种配置类型,看看您能得到什么。您可以从打字稿设置中获取任何内容

例如,如果您处于控制器上下文中

$settings = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS);

将为您提供当前扩展的设置。

对于“全局PHP脚本”,您仍然是指在TYPO3上下文中执行的脚本吗?例如,在HippoController.PHP脚本的顶部,但在类声明之前调用global.PHP脚本。您这样做的原因是否充分?你不能使用AbstractController吗?我想在一个TS文件上定义一组变量,该文件由多个页面访问,并带有来自不同扩展名的插件。因此,许多扩展中的代码可能需要HallURL变量。我希望找到一种简单的方法,从一个核心扩展中定义的全局函数访问这些变量,然后将其包含在其他扩展中。我将检查是否使用所有扩展都继承的抽象控制器。你应该在typo3v4mcv列表上寻求专家的帮助。有趣的是,我不确定我是否会遵循,除非你提出了类似我已经有的建议,请查看我的更新并让我知道。