2009-10-06 25 views
6

Có cách nào để có mô hình cho mỗi mô-đun không? Tôi có 3 mô đun, một là mô-đun "liên hệ". Tôi tạo ra một mô hình cho nó trong modules/danh bạ/mô hình/Codes.php Codes khiểnỨng dụng mô-đun Zend Framework, không thể tải các mô hình cho từng mô-đun, các mô hình nạp tự động?

class Contacts_CodesController extends Zend_Controller_Action 
{ 

    public function init() 
    { 
     /* Initialize action controller here */ 
    $this->view->messages = $this->_helper->flashMessenger->getMessages(); 

    } 

    public function indexAction() 
    { 

    $codesTable = new Contacts_Model_Codes(); 

    } 

Codes mẫu:

class Contacts_Model_Codes extends Zend_Db_Table 
{ 
    protected $_name = 'codes'; 
} 

Các lỗi tôi nhận được: Fatal lỗi: Lớp 'Contacts_Model_Codes' không tìm thấy trong /Applications/MAMP/htdocs/zf_site/application/modules/contacts/controllers/CodesController.php trên dòng 26

thanks

Trả lời

5

Bạn phải đăng ký không gian tên 'Contacts_' với trình nạp tự động. Bạn có thể sử dụng Zend_Application_Module_Autoloader cho việc này.

$autoloader = new Zend_Application_Module_Autoloader(array(
     'namespace' => 'Contacts_', 
     'basePath' => dirname(__FILE__) . '/modules/cotacts', 
    )); 

Điều này sẽ tạo các ánh xạ sau cho mô-đun của bạn bên trong cơ sở mà bạn cung cấp.

api/   => Api 
forms/  => Form 
models/  => Model 
    DbTable/ => Model_DbTable 
plugins/  => Plugin 

Nếu bạn đang sử dụng Zend_Application để boostrap ứng dụng của bạn và nó' module bạn không nên cần điều này vì các tài liệu nói rằng:

When using module bootstraps with Zend_Application, an instance of Zend_Application_Module_Autoloader will be created by default for each discrete module, allowing you to autoload module resources.

+1

này chỉ đúng đối với ZF 1.8, trong phiên bản này các module autoloader đã được bổ sung và Zend_Application sử dụng nó để bootstrap mô-đun. Trong các phiên bản cũ hơn, bạn sẽ cần phải sử dụng Zend_Application_Resource_Modules – NDM

2

Tôi đang sử dụng phiên bản 1.9. Đây là một phần của bootstrap của tôi:

protected function _initAutoload() { 
    $modelLoader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '', 
        'basePath' => APPLICATION_PATH.'/modules/default') 

     ); 
} 

    protected function _initAutoloaders() 
    { 
     $this->getApplication()->setAutoloaderNamespaces(array('Eric_')); 
     return $this; 
    } 

    protected function _initPlugins() 
    { 
     $this->bootstrap('autoloaders'); 
     $this->bootstrap('frontController'); 

     // register the plugin for setting layouts per module 
     $plugin = new Eric_Plugin_Modularlayout(); 
     $this->frontController->registerPlugin($plugin); 
      return $modelLoader; 
    } 

Plugin Eric_Plugin_Modularlayout đặt bố cục chính xác cho mỗi mô-đun.

Tôi có 3 mô-đun: mặc định, ez, danh bạ. Điều buồn cười là, Trong một hành động liên lạc tôi có thể gọi các mô hình trong thư mục ez/models. không có vấn đề.

18

Tôi đã tìm thấy sự cố. Tôi quên đặt một tập tin bootstrap vào với mô-đun liên lạc của tôi. Bây giờ tất cả đều hoạt động và tôi có thể sử dụng mô hình của riêng mình.

class Contacts_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 

} 
+5

Đồng thời thêm "resources.modules [] =" vào ứng dụng của bạn.ini –

+0

Cảm ơn, điều này đã giúp tôi. Tôi tự hỏi tại sao cả hai thứ này không được chăm sóc bởi "zf create module x". Có trường hợp nào bạn không muốn họ không? – LinusR

5

thêm

resources.modules[] = 

Để cấu hình của bạn ini

6

tôi đã tìm thấy các giải pháp, tôi đoán! :) Đó là một vấn đề khi bạn thêm tài nguyên tiếp theo trong file application.ini

resources.frontController.defaultModule = "Default" 

và cũng có thể bạn sử dụng một số loại thông số. Tôi nghĩ đó là một lỗi.

Các cách chính xác để thực hiện Modules là:

1 - Tạo module mong muốn của bạn và 'Mặc định' Module với công cụ zf

2 - Trong apllication.ini nói ZF nơi các module đang ở đâu và các bộ điều khiển của những mô-đun, với

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resources.frontController.moduleControllerDirectoryName = "controllers" 

Sử dụng tiếng

01.
resources.modules = "" 

Và thiết lập:

resources.frontController.params.prefixDefaultModule = "" 

Điều quan trọng là bởi vì công cụ zf đặt nó là "1". Đây là lỗi. :)

Và hãy nhớ KHÔNG PUT NHỮNG ĐIỀU KIỆN DEFAULT LÀ GÌ !!

3 - Tạo file bootstrap cho mỗi mô-đun và đưa:

Nếu mô-đun của tôi là 'Evacol':

<?php 
class Evacol_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 
} 

Lưu nó vào/modules/Evacol/ rõ ràng

Lưu ý về Evacol_ ... và ..._ Module_Bootstr ... TÊN MÔ HÌNH CỦA TÔI MỞ RỘNG LỚP PHÂN LOẠI. Không sử dụng giá trị mặc định của tệp tin bootstrap được tạo bằng công cụ zf. Tôi đã làm điều đó :)

KHÔNG SỬA ĐỔI BẤT KTH BẤT K EL ELSE. CNTT KHÔNG CẦN THIẾT.

Và thì đấy! Tin tôi đi. Nó hoạt động!

Đó là Zend Framework 1.10.8

Các vấn đề liên quan