typo3 - 如何在 php 7 下扩展 femanager Controller

标签 typo3 php-7 extends php-7.1 typo3-extensions

自从使用 PHP 7.0 及更高版本以来,php 的严格模式会生成如下警告:

PHP Warning: Declaration of In2code\Femanagerextended\Controller\EditController::updateAction(In2code\Femanagerextended\Domain\Model\User $user) should be compatible with In2code\Femanager\Controller\EditController::updateAction(In2code\Femanager\Domain\Model\User $user) in ($PATH)\typo3conf\ext\femanagerextended\Classes\Controller\EditController.php line 17

当尝试使用手册最佳实践部分中描述的方式扩展 TYPO3 Extension femanager 的现有 Controller 时:

<?php
namespace In2code\Femanagerextended\Controller;
use In2code\Femanager\Controller\EditController as EditControllerFemanager;
use In2code\Femanagerextended\Domain\Model\User;
/**
 * Class EditController
 *
 * @package In2code\Femanagerextended\Controller
 */
class EditController extends EditControllerFemanager
{
    /**
     * action update
     *
     * @param User $user
     * @validate $user In2code\Femanager\Domain\Validator\ServersideValidator
     * @validate $user In2code\Femanager\Domain\Validator\PasswordValidator
     * @return void
     */
     public function updateAction(User $user)
     {
         parent::updateAction($user);
     }
}

最佳答案

Wolfgang Klinger 提出的一个可能的解决方案是 XClass\TYPO3\CMS\Extbase\Mvc\Controller\Argument 类。

此类有一个 protected 属性“dataType”,通常没有 setter 。

使用 TYPO3 的 XClass 机制,可以添加一个 setDataType 方法来启用手动覆盖此属性。

有了这个,现在可以在扩展编辑/邀请/新 Controller 的(魔术)初始化操作中覆盖通常自动检测到的数据类型。

重要的是,不是改变“正常” Action (newAction、createAction ...)的类型提示和注释,而是在相应的初始化 Action 中添加类似这样的内容:

public function initializeNewAction()
{
    if ($this->arguments->hasArgument('user')) {
        // Workaround to avoid php7 warnings of wrong type hint.
        /** @var \Mediagear\Jdcompetition\Xclass\Extbase\Mvc\Controller\Argument $user */
        $user = $this->arguments['user'];
        $user->setDataType(\Vendor\Extension\Domain\Model\User::class);
    }
}

关于typo3 - 如何在 php 7 下扩展 femanager Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45563671/

相关文章:

PHP 7 和严格的 "resource"类型

php - mysqli_stmt_bind_param() 的参数 3 预计是引用 : php5. 6 vs php7

javascript - JQuery 扩展字符串

java - 如何实现扩展类的构造函数

redirect - TYPO3 Extbase - 重定向到 pid

templates - 更改单个 TYPO3 流体模板

javascript - 如何将主页中的视频ID传递到youtube等其他页面?

TYPO3 extbase数据库查询

doctrine - TYPO3 中是否有关于 Doctrine DBAL 的官方文档?

javascript:调用基类函数