2012-03-21 10 views
5

साथ Symfony2 में UserManager का विस्तार मैं इस linkFOSUserBundle

मेरी सेवा के अनुसार सही ढंग से पता चला है FOS की UserManager का विस्तार करने की कोशिश की, लेकिन मैं एक त्रुटि मैं हल नहीं किया जा सकता है:

ErrorException: Catchable Fatal Error: Argument 1 passed to FOS\UserBundle\Entity\UserManager::__construct() must be an instance of Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface, none given, called in 

MyUserManager:

namespace ChoupsCommerce\UserBundle\Model; 

use FOS\UserBundle\Entity\UserManager; 
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException; 

class MyUserManager extends UserManager 
{ 
    public function loadUserByUsername($username) 
    { 
     $user = $this->findUserByUsernameOrEmail($username); 

     if (!$user) { 
      throw new UsernameNotFoundException(sprintf('No user with name "%s" was found.', $username)); 
     } 

     return $user; 
    } 
} 
+0

आपको वह मिल जाए एक कामकाज? मुझे भी ठीक यही समस्या है। धन्यवाद। – Creasixtine

+0

वास्तव में, मैं बस एफओएस का उपयोग करना बंद कर देता हूं और मैं बस सिम्फनी 2 लॉगिन सिस्टम का उपयोग करता हूं। – Wifsimster

+0

क्या आपने मेरा समाधान आजमाया? – gilden

उत्तर

4

आप निर्माता विधि (__construct) जोड़ सकते हैं और आधार वर्ग के लिए नीचे आवश्यक तर्क पारित करने के लिए की जरूरत है:

namespace ChoupsCommerce\UserBundle\Model; 

use Doctrine\ORM\EntityManager; 
use FOS\UserBundle\Entity\UserManager; 
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface; 
use FOS\UserBundle\Util\CanonicalizerInterface; 

class MyUserManager extends UserManager 
{ 
    public function __construct(
     EncoderFactoryInterface $encoderFactory, 
     CanonicalizerInterface $usernameCanonicalizer, 
     CanonicalizerInterface $emailCanonicalizer, 
     EntityManager $em, 
     $class 
    ) { 
     parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer, $em, $class); 
    } 
} 
2

क्षमा करें मेरी अंग्रेजी गरीब है।

अपने कस्टम प्रबंधक सेवा के तर्कों हो सकता है गलत है, क्योंकि यह कहते हैं

Argument 1 passed to FOS\UserBundle\Entity\UserManager::__construct() must be an instance of Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface, none given, called in

यहाँ मेरी config है:

iep_core.iep_user_manager: 
    class: Iep\CoreBundle\Service\IepUserManager 
    arguments: [@security.encoder_factory, @fos_user.util.username_canonicalizer, @fos_user.util.email_canonicalizer, @fos_user.entity_manager, Iep\CoreBundle\Entity\User] 
18

मैं एक ही समस्या थी, यहां मेरे समाधान (मूल रूप से एक है पहले दो उत्तरों का संयोजन):

config.yml में सेवा सेट अप करें, तर्कों को न भूलें

services: 
    custom_user_manager: 
     class: Acme\UserBundle\Model\CustomUserManager 
     arguments: [@security.encoder_factory, @fos_user.util.username_canonicalizer, @fos_user.util.email_canonicalizer, @fos_user.entity_manager, Acme\UserBundle\Entity\User] 

तो (भी config.yml में) FOS user_manager को सेवा से कनेक्ट:

fos_user: 
    service: 
     user_manager: custom_user_manager 

CustomUserManager में, निर्माण-विधि याद की तरह gilden ने कहा:

class CustomUserManager extends UserManager{ 

    public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, ObjectManager $om, $class) 
    { 
     parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer, $om, $class); 
    } 

} 
+10

आप कठोर कोडित इकाई वर्ग नाम के बजाय अंतिम कन्स्ट्रक्टर तर्क के रूप में पैरामीटर मान '% fos_user.model.user.class%' का उपयोग कर सकते हैं। – devsheeep

संबंधित मुद्दे