2012-11-29 30 views
6

Xin chào Tôi đang cố gắng viết biểu mẫu đăng ký người dùng bằng mô-đun ZfcUser cho Zend Framwork 2 và muốn một số lời khuyên về các phương pháp hay nhất khi thêm nhiều trường người dùng hơn.Mở rộng ZfcUser với Zend Framework 2

Cho đến nay tôi đã tạo mô-đun riêng của mình được gọi là "WbxUser" và được nêu trong modules wiki pages Tôi đã thêm trường tùy chỉnh được gọi là "userlastname" vào biểu mẫu đăng ký của ZfcUser bằng cách sử dụng Trình quản lý sự kiện trong chức năng bootstrap mô-đun của tôi.

Code:

//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(); 
    } 
} 

Nhưng sau này, tôi đã có một chút mất vào nơi/làm thế nào để viết mã để lưu các dữ liệu bổ sung mà các lĩnh vực mới của tôi đang thu thập.

  1. Đây có phải là sự kiện mà tôi có thể bắn ra tiết kiệm thói quen cho các trường bổ sung https://github.com/ZF-Commons/ZfcUser/wiki/How-to-perform-a-custom-action-when-a-new-user-account-is-created

  2. Tôi có nên viết mô hình WbxUser của riêng tôi mà kéo dài ZfcUser \ Entity \ user.php để thêm các trường mới của tôi

Tôi là một chút của một ZF và MVC noob vì vậy sẽ rất tuyệt vời cho một cú hích theo hướng viết.

+1

bạn có thể xem bài đăng này: http://stackoverflow.com/questions/8783873/zf2-whats-the-best-practice-for-working-with-vendor-modules-form-classes – nXqd

+2

Tuyệt vời điều đó giúp ích. Tôi sẽ có một vết nứt tại viết mô-đun của tôi và tôi sẽ đăng những gì đã làm việc cho tôi. Cảm ơn một lần nữa. –

+0

cảm ơn, tôi rất mong được gặp bạn. Tôi đang làm việc trên cùng một điều :) – nXqd

Trả lời

4
+0

Chúc mừng cảm ơn vì điều đó. Đó là một bài đăng blog dễ đọc, nhưng nó vẫn không có bất kỳ ví dụ về lưu dữ liệu và mở rộng các bộ điều khiển một khi bạn đã thêm vào một biểu mẫu, đó là bit tôi bị mắc kẹt trên. –

+1

Tôi có một hướng dẫn nhanh về điều này ở đây Theo: http://circlical.com/blog/2013/4/1/l5wftnf3p7oks5561bohmb9vkpasp6 Có lẽ nó giúp – Saeven

0

Thay đổi một mô-đun của bên thứ ba không thực sự hấp dẫn đối với tôi bởi vì vào những thời điểm nó đảo lộn rất nhiều chức năng. Tôi luôn luôn cố gắng làm một cái gì đó bên ngoài mô-đun bởi vì nếu có một bản cập nhật trong các mô-đun tôi dễ dàng kết hợp vào ứng dụng của tôi mà không có thiên đường để viết lại bất cứ điều gì.

Để làm điều gì đó như bạn đang cố gắng, tôi sẽ tạo một bảng khác trong ứng dụng của tôi và thêm khóa ngoài mở rộng bảng zfcuser theo cách đó tôi có thể liên kết thông tin với mỗi zf2user trong ứng dụng của tôi.

Nó chỉ là một gợi ý vì tôi cũng mới trong zf2.

1

Bạn có thể ghi đè cấu hình mô-đun. Cách thanh lịch nhất là sử dụng zfcuser.global.php.dist trong thư mục tự động tải. Sao chép tệp này vào thư mục tự động tải ứng dụng của bạn và thay đổi tên tệp thành zfcuser.global.php. Tại đây, bạn có thể thay đổi bất kỳ tùy chọn nào bạn có thể tìm thấy ở đây. Tùy chọn này có thể được sử dụng để ghi đè thực thể zfcUser: 'user_entity_class' => 'ZfcUser \ Entity \ User'.

Sau đó, một lần nữa, bạn có thể thấy mình trong tình huống mà bạn cần thay đổi những thứ không thể thay đổi trong tệp cấu hình. Trong trường hợp này, bạn có thể tạo mô-đun người dùng của riêng mình (Bạn có thể chỉ cần sao chép toàn bộ mô-đun zfcuser cho đến khi bạn chắc chắn về những tệp bạn muốn thay thế.

Sau khi nhân bản mô-đun người dùng (và thay đổi không gian tên tương ứng) thêm mô-đun của bạn để application.config.php Hãy chắc chắn rằng mô-đun của bạn được nạp sau khi zfcuser Hoặc cách khác bạn có thể loại bỏ zfcuser từ tập tin cấu hình và đặt sau đây trong module.php:..

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

Bây giờ bạn có thể ghi đè zfcUser Đoạn mã sau có thể được sử dụng để ghi đè lên thư mục mẫu và 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', 
          ), 
         ), 
        ),   
       ), 
      ), 
     ), 
    ), 
); 

Bạn cũng có thể ghi đè dịch vụ ZfcUser trong module.php. ;-)