2017-08-08 72 views
0

延伸femanager控制器由于使用PHP 7.0和更高的,PHP的严格模式产生这样的警告:如何下PHP 7

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扩展的现有控制器femanager使用所描述的延伸时方式在手册中的最佳实践部分:

<?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); 
    } 
} 

回答

5

可能的解决方案,制定了由沃尔夫冈·克林格,是XClass的\ TYPO3 \ CMS \ Extbase \的mvc \控制器\论证类。

该类有一个受保护的属性“dataType”,它通常没有setter。

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

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

重要的是,改变“正常”操作(newAction,createAction ...)的类型提示和说明,但像这样添加一些相应的初始化操作:

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); 
    } 
} 
+0

感谢您的解释!我必须将一些额外的数据传递给newAction()中的视图,并且我得到了完全的PHP7警告。我将如何实现这一点,因为$ this-> view在initializeNewAction()中不可用?顺便说一句,你能否更深入地解释你的initializeNewAction()例子?例如。什么是'/ ** @var \ Mediagear \ Jdcompetition \ Xclass \ Extbase \ Mvc \ Controller \ Argument $ user * /'这是原始用户模型的吸入性吗?再次感谢! – chris

+0

有关如何将新属性添加到其中一个视图,请参阅femanger手册。/** @var只是我的IDE的一个提示,为var $ user –

+0

获得代码补全再次感谢!我使用'initializeView()'方法添加了所需的变量。顺便说一句:关于这个主题还有另外一个讨论和一个详细的答案:[扩展TYPO3 femanager](https://stackoverflow.com/a/47848908/415353) – chris