2017-08-08 3 views
0

Depuis l'utilisation de PHP 7.0 et supérieur, le mode strict de php génère des avertissements comme celui-ci:Comment étendre contrôleur femanager sous 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 

lorsque vous essayez d'étendre un contrôleur existant de l'extension TYPO3 femanager utilisant le décrit manière la meilleure section de la pratique du manuel:

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

Répondre

5

Une solution possible, élaborée par Wolfgang Klinger, est XCLASS le \ TYPO3 \ CMS \ Extbase \ Mvc \ Controller \ Argument classe.

Cette classe a la propriété protégée "dataType", qui n'a généralement aucun setter. En utilisant le mécanisme XClass de TYPO3, il est possible d'ajouter une méthode setDataType pour activer le remplacement manuel de cette propriété. Armé de ceci, il est maintenant possible d'écraser le type de données détecté habituellement automatique dans les actions d'initialisation (magiques) de l'extension/invitation/nouveau contrôleur.

L'important est, pas pour changer les notes de type et des annotations des actions "normales" (newAction, CréeAction ...), mais ajouter quelque chose comme ceci aux actions correspondantes: initialize

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

Merci pour votre explication! Je dois passer quelques données supplémentaires à la vue dans le newAction() et j'obtiens exactement votre avertissement PHP7. Comment pourrais-je y parvenir, car $ this-> view n'est pas disponible dans le fichier initializeNewAction()? Btw., Pourriez-vous expliquer votre exemple initializeNewAction() un peu plus en profondeur? Par exemple. qu'est-ce que/** @var \ Mediagear \ Jdcompetition \ Xclass \ Extbase \ Mvc \ Contrôleur \ Argument $ utilisateur */'Est-ce l'inharitance du modèle d'utilisateur original? Merci encore! – chris

+0

Pour ajouter de nouvelles propriétés à l'une des vues, consultez le manuel de Femanger./** @var est seulement un typehint pour mon ide pour obtenir le code completiion pour l'utilisateur var $ –

+0

Merci encore! J'ai ajouté les variables nécessaires en utilisant la méthode 'initializeView()'. En passant: il y a une autre discussion et une réponse détaillée sur ce sujet: [Extension de TYPO3 femanager] (https://stackoverflow.com/a/47848908/415353) – chris