6

こんにちは、Zend Framwork 2 の ZfcUser モジュールを使用してユーザー登録フォームを作成しようとしています。ユーザー フィールドを追加する際のベスト プラクティスについてアドバイスをお願いします。

これまでのところ、「WbxUser」という独自のモジュールを作成し、モジュールの wiki ページで説明さ れているように、モジュールのブートストラップ関数でイベント マネージャーを使用して、「userlastname」というカスタム フィールドを 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. ZfcUser\Entity\User.php を拡張して新しいフィールドを追加する独自の WbxUser モデルを作成する必要がありますか?

私は ZF と MVC の初心者なので、書き込み方向のナッジには非常に満足しています。

4

3 に答える 3

4

これはもう少し直感的なようです

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

于 2012-12-05T23:50:01.510 に答える
1

モジュール構成をオーバーライドできます。最も洗練された方法は、autoload フォルダーで zfcuser.global.php.dist を使用することです。このファイルをアプリケーションの自動ロード フォルダーにコピーし、ファイル名を 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',
                            ),
                        ),
                    ),           
                ),
            ),
        ),
    ), 
);

また、module.php で ZfcUser サービスをオーバーライドできます。;-)

于 2013-09-07T14:46:50.753 に答える
0

サードパーティのモジュールを変更することは、多くの機能を不安定にすることがあるため、私にはあまり魅力的ではありません。モジュールに更新がある場合、何も書き直すことなくアプリケーションに簡単に組み込むことができるため、私は常にモジュールの外で何かをしようとします。

あなたがやろうとしているようなことをするには、アプリケーションに別のテーブルを作成し、zfcuser テーブルを拡張する外部キーを追加して、アプリケーション内の各 zf2user に情報を関連付けることができるようにします。

私もzf2が初めてなので、これは単なる提案です。

于 2013-07-03T09:47:07.717 に答える