2016-02-03 8 views
0

Я пытаюсь добавить новые регистровые поля в zfcuser moudle в регистр. У меня есть проблема BCS новых полей не отображается в register.phtmlZfcuser add register fields

Что я делаю:

Сначала я создать новую User сущности в моем пользовательском модуле и расширить \ZfcUser\Entity\User и добавить новые свойства protected $first_name и поставить геттер.

Во-вторых, я меняю user_entity_class' => 'MyModule\Entity\User в конфигурации.

В-третьих, я создаю пользовательский класс формы, где я расширяю \ZfcUser\Form\Register, где я создаю два метода __constructor($name,RegistrationOptionsInterface $options), второй init(). THis выглядеть следующим образом:

// Module/src/Mymod/Form 

class ClientRegisterForm extends \ZfcUser\Form\Register 
{ 
    public function __construct($name, RegistrationOptionsInterface $options) 
    { 
     parent::__construct($name, $options); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public function init(){ 
     $this->add(array(
      'name' => 'first_name', 
      'options' => array(
       'label' => 'First name', 
      ), 
      'attributes' => array(
       'type' => 'text' 
      ), 
     )); 
} 

И я зарегистрировать как sercice в модуле:

public function getServiceConfig() 
{ 
    return array(
     'factories' => array(
      'clientRegisterForm' => function($sm) { 
       $clientRegisterForm = new ClientRegisterForm(null, array()); 

       return $clientRegisterForm; 
      } 
     ) 
    ); 
} 

Так проблема в том, BCS zfcuser DonT ничего не знают о новом поле. Список циклов только по умолчанию. Как уведомлять модуль zfcuser о новом поле таким образом?

register.phtml

<?php foreach ($form as $element): ?> 
<?php echo $this->formInput($element) . $this->formElementErrors($element) ?> 
<?php endforech; ?> 

ответ

0

Обычно вы сначала измените module.config.php так, что он отражает ваши zfcuser_entity должным образом.

return array(
    'doctrine' => array(
     'driver' => array(
      // overriding zfc-user-doctrine-orm's config 
      'zfcuser_entity' => array(
       'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
       'paths' => __DIR__ . '/../src/FooUser/Entity', 
      ), 

      'orm_default' => array(
       'drivers' => array(
        'FooUser\Entity' => 'zfcuser_entity', 
       ), 
      ), 
     ), 
    ), 

    'zfcuser' => array(
     // telling ZfcUser to use our own class 
     'user_entity_class'  => 'FooUser\Entity\User', 
     // telling ZfcUserDoctrineORM to skip the entities it defines 
     'enable_default_entities' => false, 
    ), 
); 

Затем в загрузчике вы должны слушать, чтобы прикрепить к ZfcUser \ Form \ RegisterFilter, ZfcUser \ Form \ Реестре (как INIT), чтобы изменить форму.

Наконец, также в вашем бутстрапе вы присоединяетесь к событию «register» в диспетчере событий «zfcuser_user_service».

namespace FooUser; 

use Zend\Mvc\MvcEvent; 

class Module { 

    public function getConfig() 
    { 
     return include __DIR__ . '/config/module.config.php'; 

    } 

    public function getAutoloaderConfig() 
    { 
     return array(
      'Zend\Loader\StandardAutoloader' => array(
       'namespaces' => array(
        __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, 
       ), 
      ), 
     ); 
    } 

    public function onBootstrap(MVCEvent $e) 
    { 
     $eventManager = $e->getApplication()->getEventManager(); 
     $em   = $eventManager->getSharedManager(); 
     $em->attach(
      'ZfcUser\Form\RegisterFilter', 
      'init', 
      function($e) 
      { 
       $filter = $e->getTarget(); 
       // do your form filtering here    
      } 
     ); 

     // custom form fields 

     $em->attach(
      'ZfcUser\Form\Register', 
      'init', 
      function($e) 
      { 
       /* @var $form \ZfcUser\Form\Register */ 
       $form = $e->getTarget(); 
       $form->add(
        array(
         'name' => 'username', 
         'options' => array(
          'label' => 'Username', 
         ), 
         'attributes' => array(
          'type' => 'text', 
         ), 
        ) 
       ); 

       $form->add(
        array(
         'name' => 'favorite_ice_cream', 
         'options' => array(
          'label' => 'Favorite Ice Cream', 
         ), 
         'attributes' => array(
          'type' => 'text', 
         ), 
        ) 
       ); 
      } 
     ); 

     // here's the storage bit 

     $zfcServiceEvents = $e->getApplication()->getServiceManager()->get('zfcuser_user_service')->getEventManager(); 

     $zfcServiceEvents->attach('register', function($e) { 
      $form = $e->getParam('form'); 
      $user = $e->getParam('user'); 
      /* @var $user \FooUser\Entity\User */ 
      $user->setUsername( $form->get('username')->getValue()); 
      $user->setFavoriteIceCream($form->get('favorite_ice_cream')->getValue()); 
     }); 

     // you can even do stuff after it stores   
     $zfcServiceEvents->attach('register.post', function($e) { 
      /*$user = $e->getParam('user');*/ 
     }); 
    } 
} 

У меня есть полный на посте, который идет через мелочи здесь: http://circlical.com/blog/2013/4/1/l5wftnf3p7oks5561bohmb9vkpasp6

В настоящее время, я просто свернуть свои собственные объекты пользователя, службу идентификации в сочетании с моим собственным Логин, Reg формой и так далее. Первоначально мне понравилась комбинация ZfcUser и BjyAuthorize - но BjyAuthorize + custom стал лучшим удовольствием!

Удачи человек.

 Смежные вопросы

  • Нет связанных вопросов^_^