2013-06-07 37 views
20

Tôi hiện đang phát triển trên Windows với WampServer và có Composer hoạt động (với OpenSSL), với Propel được cài đặt mà không có vấn đề và mọi thứ có vẻ hoạt động tốt. Tuy nhiên, dự án của tôi bây giờ cần phải sử dụng số Equal Nest Behaviour được tìm thấy here.Cài đặt hành vi Propel với Composer

Tôi nghĩ điều này sẽ cho phép tôi sử dụng hành vi đẩy. Trong schema.xml của tôi, tôi có đoạn mã sau:

<table name="friend"> 
    <behavior name="equal_nest"> 
    <parameter name="parent_table" value="user" /> 
    </behavior> 
</table> 

Nhưng khi tôi chạy propel-gen sql tôi nhận được lỗi:

[phingcall] Unknown behavior "equal_nest"; make sure you configured the propel.be 
havior.equal_nest.class setting in your build.properties 

Các tài liệu nói:

Then, if you don't use Composer, or an autoloader in your application, add the following configuration to your build.properties or propel.ini file:

Làm tôi đoán rằng tôi đã không không phải đặt trong tệp build.properties. Tuy nhiên, đặt nó trong mang lại cho tôi những lỗi sau:

PHP Fatal error: Class 'EqualNestParentBehavior' not found in C:\home\movesleag 
ue.com\vendor\craftyshadow\propel-equalnest-behavior\src\EqualNestBehavior.php o 
n line 74 

Tôi đã không chắc chắn nếu đó là một cái gì đó để làm với tự động load không hoạt động hoặc không gian tên (schema của tôi có một không gian tên, nhưng tôi nhận được lỗi này tương tự khi loại bỏ nó quá).

tập tin composer.json của tôi trông như thế này:

{ 
    "require": { 
     "craftyshadow/propel-equalnest-behavior": "dev-master" 
    } 
} 

Lưu ý: Tôi đã có Propel trong đó bản thân, nhưng là hành vi equalnest đòi hỏi nó bản thân tôi chỉ để cho rằng làm công việc của mình.

Vì vậy, cách chính xác để sử dụng hành vi Propel với Composer là gì và nếu tôi làm đúng, tại sao tôi lại thấy các lỗi ở trên?

cập nhật

tôi đã thêm dòng này để đầu EqualNestBehaviour.php:

include __DIR__ . DIRECTORY_SEPARATOR . 'EqualNestParentBehavior.php'; 

Và SQL dường như được tạo ra một cách chính xác mà không có lỗi. Tuy nhiên, việc thay đổi tập tin đó dường như không thông minh với tôi! Nó có thể là một vấn đề với autoloading? Có bất cứ điều gì bạn có thể nghĩ rằng tôi có thể làm gì để kiểm tra điều đó?

Tôi có thể xác nhận rằng sử dụng Equal Nest Behaviour trong mã Propel thực tế của tôi hoạt động tốt, sử dụng các chức năng như addFriends() - đây là những thay đổi ở trên vẫn còn tại chỗ.

Trong file autoload_namespaces.php của tôi, tôi có như sau:

<?php 

// autoload_namespaces.php generated by Composer 

$vendorDir = dirname(dirname(__FILE__)); 
$baseDir = dirname($vendorDir); 

return array(
); 
+0

Tôi giả sử bạn đã cài đặt 'php composer.phar'? Có thể thử cài đặt cả Propel và Behaviour thông qua Composer (có vẻ như chỉ là Behavior) .. – Sam

+0

Không, tôi sử dụng cài đặt toàn cầu, vì vậy chỉ 'composer install' hoạt động. Như tôi đã nói ở trên, hành vi 'require's Propel 1.6. *. Tất nhiên, propel được cài đặt quảng cáo làm việc hoặc tôi sẽ không thể nhìn thấy các thông báo lỗi từ Propel cả. – LeonardChallis

+0

Oh Tôi đã bỏ lỡ hành vi bao gồm Propel 1.6. Nó chắc chắn có vẻ giống như một vấn đề tự động tải, tôi sẽ thử nó với Propel trong tệp Composer - chỉ trong trường hợp. – Sam

Trả lời

2

Đây là vấn đề tự động load.

Hãy kiểm tra xem bạn có

propel.behavior.equal_nest.class = vendor.craftyshadow.propel-equalnest-behavior.src.EqualNestBehavior 

trong build.properties của bạn (ví Propel).

Vui lòng kiểm tra xem tệp trình tải tự động tạo của nhà soạn nhạc có được bao gồm trong quá trình khởi động của ứng dụng của bạn hay không. Composer tạo tệp "vendor/autoload.php".Nếu bạn bao gồm nó, sau đó bạn nhận được tự động tải miễn phí. Và tất cả mọi thứ được cài đặt bởi Composer được tìm thấy tự động.

require 'vendor/autoload.php'; 
+0

Có, tự động tải là một cách tốt hơn để làm việc. Cảm ơn bạn. – LeonardChallis

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