TYPO3延长期末课程

问题描述 投票:0回答:1

我有以下问题:

<?php

declare(strict_types=1);

namespace Abc\Def\Services;


class TypoScriptProvider extends \TYPO3\CMS\Extbase\Configuration\BackendConfigurationManager
{

    public function __construct()
    {
    }

   
    public function getTypoScriptSetupByPageid($pageId = null): array
    {
        $configurationManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Configuration\\BackendConfigurationManager');
        $configurationManager->currentPageId = $pageId;
        $extbaseFrameworkConfiguration = $configurationManager->getTypoScriptSetup();
        return $extbaseFrameworkConfiguration;
    }
}

对于 TYPO3 v12 来说这是可行的,但现在 TYPO3 决定将

BackendConfigurationManager
作为 v13 中的最后一个类。我怎样才能延长这门课?

我试过这个

<?php

declare(strict_types=1);

namespace Abc\Def\Services;

use TYPO3\CMS\Extbase\Configuration\BackendConfigurationManager;

class TypoScriptProvider
{
    protected BackendConfigurationManager $backendConfigurationManager;

    public function __construct(BackendConfigurationManager $backendConfigurationManager)
    {
        // Dependency Injection
        $this->backendConfigurationManager = $backendConfigurationManager;
    }

    public function getTypoScriptSetupByPageid(int $pageId = null): array
    {
        // Verwende eine Methode, um die Seiten-ID zu setzen
        $this->backendConfigurationManager->getCurrentPageId($pageId);

        // Abrufen des TypoScript-Setups
        $typoScriptSetup = $this->backendConfigurationManager->getTypoScriptSetup();

        return $typoScriptSetup;
    }
}

但是

currentPageId
无法访问,因为它现在受到保护。 ich怎么能做到这一点?

php controller typo3 extbase
1个回答
0
投票

@internal 仅在 Extbase 中使用,不是 TYPO3 Core API 的一部分。

来自 PHP-DocBlock 类。该类是内部类,不是公共 API 的一部分。它可以随时更改,而不会破坏或记录公共可用的 API。

重点是,

BackendConfigurationManager
绑定到
ServerRequestInterface
并使用这些请求属性和参数。这个类已经被重构为 Symfony DI'able,并且要求必须从该类中删除状态,因为它现在成为一个真正的服务。并且 DI 服务器必须是无状态的,这意味着不再有
current page
属性和 setter/getter。其余的私有方法使用请求信息来检索值,并使用运行时缓存来存储该类外部的状态。

您也不应该直接使用 BackendConfigurationManager,而应该使用 ConfigurationManager,它根据传递的

ServerRequestInterface $request
对象中的属性使用前端或后端管理器。

public function getTypoScriptSetup(ServerRequestInterface $request): array

这是TYPO3 v13中方法的签名。这意味着您需要传递一个请求对象,该对象需要包含要设置的必需属性,因为该类从请求中读取页面信息。

在后端的情况下,它使用帖子正文中的

id
值或在上下文中获取参数。

如果不知道您的确切用例是什么,就很难给出准确的示例和指导来以正确的方式实现它。

您可以尝试创建一个虚假请求,如下例取自 TYPO3 核心测试(TBH 未在真实环境中进行测试):

$request = (new ServerRequest())->withQueryParams(['id' => 123]);
$typoScriptSetup = $this->backendConfigurationManager->getTypoScriptSetup($request);

对于

BackendConfigurationManager
的另一种方法同样有效,它需要传递
ServerRequestInterace
对象。

© www.soinside.com 2019 - 2024. All rights reserved.