2012-01-20 22 views
9

Trong ứng dụng Symfony2 chuẩn của tôi, tôi có một nhóm các gói với một số thực thể. Một số thực thể này không nằm trong thư mục chuẩn, việc tự động hóa học thuyết phát hiện (ví dụ: /src/Acme/DemoBundle/Entities) nhưng ở một vị trí khác.Có cách nào để sửa đổi cấu hình ánh xạ thực thể cho học thuyết bên ngoài tệp cấu hình không?

tôi có thể dễ dàng sử dụng config.yml nói với học thuyết sử dụng một vị trí khác nhau như thế này:

doctrine: 
    orm: 
     auto_mapping: false 
     mappings: 
      AcmeDemoBundle: 
       type: annotation 
       prefix: Acme\DemoBundle\Entities\ 
       dir: %kernel.cache_dir%\Acme\DemoBundle\Entities 

này hoạt động. Nhưng nói rằng tôi có 10 gói với một ánh xạ khác nhau, config.yml bị cồng kềnh rất nhanh. Có cách nào khác không, ví dụ: với một CompilerPass hoặc thông qua DependencyInjection, vì vậy tôi không cần phải thêm tất cả các thực thể trong config.yml của tôi? Tôi đã nhìn vào DoctrineBundle, nhưng không có may mắn cho đến nay.

+0

Tôi đang tìm chính xác cách định cấu hình ánh xạ trong config.yml. Cảm ơn bạn :) – flu

Trả lời

2

Để tự trả lời:

cách đơn giản nhất là điều chỉnh tự động tải, không cần phải sửa đổi cài đặt. Trong phân phối tiêu chuẩn Symfony trong autoload.php bạn phải thêm một vị trí khác để registerNamespace-phương pháp:

$loader->registerNamespaces(array(
    [...] 
    'Foo' => array(__DIR__.'/../src/dirA', __DIR__.'/../src/dirB') 
)); 

Học thuyết sau đó sẽ tìm kiếm đối tượng trong "Foo" namespace đầu tiên trong dira và sau đó trong dirB nếu không tìm thấy.

0

Bạn có thể bao gồm các file cấu hình khác sử dụng imports

# yaml 
imports: 
    - { resource: entities.yml } 

<!-- xml --> 
<imports> 
    <import resource="enditites.xml" /> 
</imports> 

// PHP 
$loader->import('entities.php'); 

Bạn thậm chí không cần phải dính vào một loại tập tin duy nhất. Bạn có thể nhập tệp cấu hình xml vào tệp yaml, ví dụ:

+0

Nhưng tôi vẫn phải thêm cấu hình theo cách thủ công. Tôi đang tìm một cách lập trình. – acme

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