2017-08-08 102 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