2012-11-29 3 views
6

こんにちは、私はZend Framwork 2のZfcUserモジュールを使用してユーザー登録フォームを作成しようとしています。Zend Framework 2でZfcUserを拡張する

これまでのところ私は自分のモジュール「WbxUser」を作成しました。modules wiki pagesで説明したように、私のモジュールブートストラップ機能でイベントマネージャを使ってZfcUserの登録フォームに「userlastname」というカスタムフィールドを追加しました。

コード:

//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. は、この私の新しいフィールドを追加するZfcUser \エンティティ\ User.phpを拡張し、私は私自身のWbxUserモデルを書くことなら、私は追加のフィールド

  2. https://github.com/ZF-Commons/ZfcUser/wiki/How-to-perform-a-custom-action-when-a-new-user-account-is-createdするためのルーチンのセーブオフ発射できるイベントです

私は少しZFとMVCのnoobですので、書き込み方向の微妙な変化には非常に大きなものになります。時には、それは多くの機能を不安定にするので

+1

この投稿を見ることができます:http://stackoverflow.com/questions/8783873/zf2-whats-the-best-practice-for-working-with-vendor-modules-form-classes – nXqd

+2

恐ろしいそれは助けになる。私はモジュールを書く際に亀裂があり、私のために働いていたものを投稿します。再度、感謝します。 –

+0

ありがとう、私はあなたを見て楽しみにしています。私は同じことに取り組んでいます:) – nXqd

答えて

4

この1つはもう少し直感的なサードパーティ製のモジュールを変更

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

+0

乾杯はありがたいです。これは読みやすいブログ記事ですが、フォームに追加したデータを保存してコントローラを拡張する例はまだありません。これは私が固執しているビットです。 –

+1

私はここでこれについてのクイックガイドを持っていますTheo:http://circlical.com/blog/2013/4/1/l5wftnf3p7oks5561bohmb9vkpasp6多分それが役立ちます – Saeven

0

のようですが本当に私にアピールしません。私はいつもモジュールの外に何かしようとします。なぜなら、モジュールに更新があると、何かを書き直すことなく簡単に私のアプリケーションに組み込むことができるからです。

私のアプリケーションで別のテーブルを作成し、zfcuserテーブルを拡張する外部キーを追加すると、アプリケーションの各zf2userに情報を関連付けることができます。

私はzf2で新しくなったばかりです。

1

モジュールの設定を変更することができます。最もエレガントな方法は、autoloadフォルダー内のzfcuser.global.php.distを使用することです。このファイルをappliction autoloadフォルダにコピーし、ファイル名をzfcuser.global.phpに変更します。ここでは、ここで見つけることができるオプションを変更することができます。このオプションは、zfcUserエンティティを無効にするために使用できます: 'user_entity_class' => 'ZfcUser \ Entity \ User'。

また、構成ファイルで変更できないものを変更する必要がある場合があります。この場合、独自のユーザーモジュールを作成することができます(置き換えるファイルについて確かめるまでzfcuserモジュール全体を複製することができます)

ユーザーモジュールをクローンした後(それに応じて名前空間を変更した後) 。あなたのモジュールがzfcuser後にロードされていることを確認しapplication.config.phpためにあなたのモジュールを追加したり、別の方法としては、設定ファイルから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サービスを無効にすることもできます。 ;-)

関連する問題