2010-09-26 18 views
9

Tôi muốn tích hợp Propel với Zend framework. Tôi đã nhìn thấy sự tích hợp của học thuyết trong quá khứ nhưng this post nói có vẻ như propel được thực hiện một chút khác nhau.Cách Zend Framework với Propel ORM

Propel có hai điều xảy ra cho nó đã: người đầu tiên là Propel bao gồm autoloader riêng của mình, có nghĩa là tôi không phải cố gắng và lực lượng Propel vào cấu trúc hệ thống tập tin Zend Framework ‘s. Thứ hai là Propel được thiết kế để cho phép bạn đặt các tệp của mình ở bất cứ đâu bạn muốn một cách dễ dàng, miễn là bạn cập nhật include path đúng cách. Điều này khiến quá trình này trở nên dễ dàng hơn nhiều so với tôi nghĩ.

Nhưng bài đăng không đi sâu vào chi tiết về cách hoàn thành. Tôi đoán tôi phải sửa đổi ZendBootstrap.phpapplication.ini (Tôi đang sử dụng Zend 1.10.8 mới nhất), nhưng tôi thấy khó tìm một bài đăng trên phiên bản mới nhất của Zend với phiên bản mới nhất của Propel.

Bất cứ ai cũng có thể nhận xét cách thực hiện điều này một cách mượt mà nhất có thể?

một câu hỏi khác: không Propel có giao diện dòng lệnh hoặc tôi không cần giao diện dòng lệnh cho propel nếu tôi đang sử dụng giao diện dòng lệnh Zend?

Trả lời

11

tôi havent sử dụng Propel ngoài Symfony nhưng từ những gì tôi biết cho Propel nhưng tôi sẽ nghĩ giống như sau sẽ hoạt động trong thời gian chạy:

Trong bootstrap của bạn

public function initPropel() 
{ 
    require_once 'Propel.php'; 
    Propel::init($this->getOptions('propelConfig')); 

    // so we can get the connection from the registry easily 
    return Propel::getConnection(); 
} 

Trong application.xml của bạn (thích ứng với INI nếu thats những gì bạn thích)

<applicationConfiguration xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/"> 
    <production> 
    <!-- other stuff --> 
    <includePaths> 
     <propelRuntime><zf:const zf:name="APPLICATION_PATH" />/../library/propel/runtime</propelRuntime> 
    </includePaths> 
    <propelConfig><zf:const zf:name="APPLICATION_PATH" />/configs/propel-runtime.php</propelConfig> 
    <!-- other stuff --> 
    </production> 
</applicationConfiguration> 

Tất nhiên isnt này hội nhập thực sự đầy đủ như xa như im quan tâm ... nhưng nó nên đủ để giúp bạn và chạy mà không gặp nhiều rắc rối. Nếu nó có giá trị đầu tư cho bạn về dự án này tôi sẽ đi trước và làm cho một nguồn tài nguyên ứng dụng. Chạy một bản xây dựng propel và xem một mảng php đã biên dịch. Sau đó ánh xạ tới xml hoặc ini và nhúng nó trực tiếp vào tệp cấu hình ứng dụng của bạn. Sau đó sửa đổi initPropel bạn để xử lý nó như:

public function initPropel() 
{ 
    require_once 'Propel.php'; 
    Propel::setConfiguration($this->getOptions('propelConfig')); 
    Propel::initialize(); 

    // so we can get the connection from the registry easily 
    return Propel::getConnection(); 
} 

Nếu bạn muốn bạn có thể thậm chí không tải trực tiếp các mảng như phân tích cú pháp từ tập tin cấu hình mà thay vào đó tạo ra một đối tượng PropelConfiguration và programtically đặt tất cả các thông số của bạn, sau đó vượt qua đó để setConfiguration.

Đối với các công cụ xây dựng, ive tìm thấy tích hợp với Zend_Tool là một thử thách vì vậy tôi có xu hướng dựa vào phing hoặc tập lệnh shell tùy chỉnh cho tất cả những điều đó. Trừ khi bạn có kế hoạch sử dụng Propel trên nhiều dự án, có lẽ nó không có thời gian để thực hiện mức tích hợp này.Tôi đã làm nó với Doctrine 1.xa trong khi trở lại và nó đã cho tôi một vài tuần để làm việc tất cả các kinks ra :-)

+0

Làm thế nào để tôi thích nghi với ini? Tôi không có ý tưởng –

+0

@rodrigo: nó phải là một bản dịch khá dễ dàng vì cấu trúc không phức tạp ... tôi nghĩ bạn có thể phân tích các hằng số trực tiếp trong INI vì vậy tất cả những gì bạn phải làm là sử dụng các cặp giá trị khóa int eh phần chính xác . Sau đó, một lần nữa tôi có thể sai, tôi không bao giờ sử dụng định dạng INI. Nếu bạn không thể tìm ra nó tôi sẽ gửi một câu hỏi mới về nó ... bạn sẽ nhận được nhiều hơn một phản ứng theo cách đó :-) – prodigitalson

1

Tôi đặt thư viện Propel trong "Zend_Project/thư viện của bạn" với một thư mục có tên Propel thư mục thời gian chạy trong đó.

Sau đó, tôi đặt đoạn mã này vào tệp bootstrap.php của mình.

protected function _initPropel() 
{ 
    //require Propel Library 
    require '../library/Propel/runtime/lib/Propel.php'; 

    //initialize Propel configuration 
    Propel::init(APPLICATION_PATH . '/configs/orm-conf.php'); 

    //initialize Propel connection 
    Propel::initialize(); 

    //return Propel Connection 
    return Propel::getConnection(); 

} 

My Propel file cấu hình đang ở trong "Zend dự án của bạn/application/configs"

Bạn cũng cần phải sửa đổi tập tin index.php của bạn vì vậy nó sẽ tìm ra mô hình ORM bạn đã tạo:

set_include_path (implode (PATH_SEPARATOR, mảng ( realpath (APPLICATION_PATH '/../library'), realpath (APPLICATION_PATH '/ mô hình'), get_include_path(), ))..);

Bạn đặt các mô hình của mình vào tên "Dự án/ứng dụng/Mô hình/cơ sở dữ liệu" của bạn được đặt trong schema.xml của bạn bằng thuộc tính xml trong thẻ "database name =" orm "".

1

Chỉ cần thử thêm init của propel vào tệp index.php nhưng TRƯỚC KHI bạn thiết lập quá trình tự động tải. Trong trường hợp này, Zend_Autoloader không thể tương tác với cơ chế tự động nạp Propel. Đối với tôi nó hoạt động tốt, nhưng tôi không chắc nó là một thiết kế tốt ...)