Расширение ZfcUser с помощью Zend Framework 2

Привет, Я пытаюсь написать регистрационную форму пользователя с использованием модуля ZfcUser для Zend Framwork 2 и хотел бы посоветоваться с рекомендациями при добавлении дополнительных полей пользователя.

До сих пор я создал свой собственный модуль под названием «WbxUser» и, как указано в страницах wiki модулей, я добавил пользовательское поле «имя пользователя» в регистрационную форму ZfcUser, используя диспетчер событий в моей начальной загрузке модулей.

Код:

//WbxUser.Module.php namespace WbxUser; use Zend\Mvc\MvcEvent; class Module { public function onBootstrap(MvcEvent $e){ $events = $e->getApplication()->getEventManager()->getSharedManager(); $events->attach('ZfcUser\Form\Register','init', function($e) { $form = $e->getTarget(); $form->add(array( 'name' => 'userlastname', 'attributes' => array( 'type' => 'text', ), 'options' => array( 'label' => 'Last Name', ), )); // Do what you please with the form instance ($form) }); $events->attach('ZfcUser\Form\RegisterFilter','init', function($e) { $filter = $e->getTarget(); $filter->add(array( 'name' => 'userlastname', 'required' => true, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'StringLength', 'options' => array( 'min' => 3, 'max' => 255, ), ), ), )); }); } public function getConfig(){ return array(); } public function getAutoloaderConfig(){ return array(); } } 

Но после этого я немного потерял, где / как написать код, чтобы сохранить дополнительные данные, которые собирают мои новые поля.

  1. Является ли это событием, когда я могу отключить сохранение подпрограмм для дополнительных полей https://github.com/ZF-Commons/ZfcUser/wiki/How-to-perform-a-custom-action-when-a-new-user -счет-это созданное

  2. Должен ли я писать свою собственную модель WbxUser, которая расширяет ZfcUser \ Entity \ User.php, чтобы добавить мои новые поля

Я немного ZF и MVC noob, так что было бы очень здорово, чтобы подтолкнуть направление записи.

это кажется немного более интуитивным

http://juriansluiman.nl/en/article/117/use-3rd-party-modules-in-zend-framework-2

Вы можете переопределить конфигурации модулей. Самый элегантный способ – использовать zfcuser.global.php.dist в папке autoload. Скопируйте этот файл в папку автозагрузки приложения и измените имя файла на zfcuser.global.php. Здесь вы можете изменить любой вариант, который вы можете найти здесь. Эта опция может использоваться для переопределения объекта zfcUser: 'user_entity_class' => 'ZfcUser \ Entity \ User'.

Опять же, вы можете оказаться в ситуации, когда вам нужно изменить то, что не может быть изменено в файле конфигурации. В этом случае вы можете создать свой собственный пользовательский модуль (вы можете просто клонировать весь модуль zfcuser, пока не будете уверены в том, какие файлы вы хотите заменить.

После клонирования пользовательского модуля (и соответственно изменившего пространства имен) добавьте свой модуль в application.config.php. Убедитесь, что ваш модуль загружен после zfcuser. Или, альтернативно, вы можете удалить zfcuser из файла конфигурации и поместить в module.php следующее:

 public function init($moduleManager) { $moduleManager->loadModule('ZfcUser'); } 

Теперь вы можете переопределить конфигурации модуля ZfcUser. Следующий сниппет можно использовать для переопределения папки шаблона и UserController.

 <?php // Note most routes are managed in zfcUser config file. // All settings here either overrides or extend that functionality. return array( 'view_manager' => array( 'template_path_stack' => array( // 'zfcuser' => __DIR__ . '/../view', Override template path ), 'template_map' => array( // You may want to use templates from the original module without having to copy - paste all of them. ), ), 'controllers' => array( 'invokables' => array( // 'zfcuser' => 'YourModule\Controller\IndexController', // Override ZfcUser controller. ), ), 'router' => array( 'routes' => array( 'zfcuser' => array( 'type' => 'Literal', 'priority' => 2500, 'options' => array( 'route' => '/user', 'defaults' => array( // Use original ZfcUser controller. // It may be a good idea to use original code where possible 'controller' => 'ZfcUser\Controller\UserController', 'action' => 'index', ), ), 'may_terminate' => true, 'child_routes' => array( 'authenticate' => array( 'type' => 'Literal', 'options' => array( 'route' => '/authenticate', 'defaults' => array( // Invoke YourModule\Controller\IndexController 'controller' => 'zfcuser', 'action' => 'authenticate', ), ), ), ), ), ), ), ); 

Также вы можете переопределить сервисы ZfcUser в module.php. 😉

Изменение модуля третьей стороны действительно не привлекает меня, потому что время от времени оно нарушает множество функций. Я всегда пытаюсь сделать что-то вне модуля, потому что, если в модуле есть обновление, я легко включаю в свое приложение без убежища, чтобы переписать что-либо.

Чтобы сделать то, что вы пытаетесь сделать, я бы создал другую таблицу в своем приложении и добавил внешний ключ, который расширяет таблицу zfcuser таким образом, что я могу связать информацию с каждым zf2user в своем приложении.

Это просто предложение, поскольку я также новичок в zf2.