Лучшая практика ZF2 для изменения основных классов модуля поставщика?

Я прочитал этот ответ ZF2, что лучший способ работы с классами форм модуля Vendor?. Итак, в основном понятно, как изменить настраиваемые части модуля поставщика, но что мне делать, если в модуле zfcUser я хочу добавить новую функциональность для Entity/User?

Короче говоря, я хочу проверить роль пользователя, я добавил в поле БД, как лучше всего это сделать? Может быть, я должен сделать это где-то еще, а не в zfcUSer, если да, то где?


person Brock    schedule 25.03.2013    source источник


Ответы (2)


Взгляните на ZfcUser/config/zfcuser.global.php.dist

Там ты увидишь это

/**
 * User Model Entity Class
 *
 * Name of Entity class to use. Useful for using your own entity class
 * instead of the default one provided. Default is ZfcUser\Entity\User.
 * The entity class should implement ZfcUser\Entity\UserInterface
 */
//'user_entity_class' => 'ZfcUser\Entity\User',

Указания просты: скопируйте файл в ./config/autoload/zfcuser.global.php, убедитесь, что ваш класс объектов реализует ZfcUser\Entity\UserInterface, раскомментируйте эту строку и измените FQCN, чтобы он соответствовал объекту, который вы хотите использовать вместо этого.

person Crisp    schedule 25.03.2013
comment
Но тема продолжается. Что делать, если я хочу использовать идентификатор имени столбца, а не user_id, или изменить любой другой файл, который нельзя установить в конфигурации? Кстати, даже если я изменю объект через конфигурацию, где лучше всего хранить мой пользовательский объект UserEntity? Спасибо! - person Brock; 27.03.2013
comment
Если вы хотите использовать другие имена столбцов, вы замените службу zfcuser_user_mapper на одну из своих. Как правило, вы делаете это в своем собственном модуле и предоставляете классы и конфигурацию для переопределения настроек и служб zfcusers. - person Crisp; 27.03.2013
comment
Хм, не могли бы вы указать пример кода, пожалуйста? Я действительно новичок в пути ZF2 :). Заранее спасибо! - person Brock; 28.03.2013
comment
Трудно найти хорошие примеры. Ознакомьтесь с вики zfcuser github.com/ZF-Commons/ZfcUser/wiki/_pages . Взгляните на все вопросы на SO, которые были заданы о zfcuser stackoverflow.com/search?q=zfcuser+is %3Вопрос . Посмотрите на другие модули, которые расширяют или иным образом взаимодействуют с zfcuser, например, zfcUserDoctrineORM, найденный по адресу github.com/ZF-Commons или модуль ScnSocialAuth по адресу github.com/SocalNick/ScnSocialAuth. - person Crisp; 28.03.2013

Я не буду утверждать, что это лучшая практика, но именно так мне удалось справиться с ситуацией! Во-первых, большое спасибо за ответ на этот вопрос ZF2: Пользовательский сопоставитель пользователей для модуля ZfcUser< /а>.

Так я и сделал:

  1. Added configuration of zfcUser/Entity in zfc-user.global.php autoload:
    'zfcuser' => array(
        'tableName' => 'users',
        'user_entity_class' => 'Application\Entity\User'
    ),
    
  2. Добавлены мои классы для Entity\User, Mapper\User и Mapper\Hydrator в мои подпапки src/Application Entity и Mapper.
  3. Обновлены пространства имен этих классов, чтобы они были моими Application\Entity и Application\Mapper
  4. Добавил эту конфигурацию в функцию getServiceConfig моего Module.php:

    'factories' => [
        'zfcuser_user_mapper' => function ($sm) {
            $mapper = new Mapper\User();
            $mapper->setDbAdapter($sm->get('Zend\Db\Adapter\Adapter'));
            $mapper->setEntityPrototype(new Entity\User());
            $mapper->setHydrator(new Mapper\UserHydrator());
            return $mapper;
        },
    ]
    
  5. Обновлены зависимости моих классов для использования ZfcUSer и запущен мой Entity\User как extends \ZfcUser\Entity\User implements \ZfcUser\Entity\UserInterface.
person Brock    schedule 30.03.2013