2012-03-01 15 views
9

Tôi đang sử dụng Symfony2 và khi tôi cố gắng để tạo ra các sơ đồ ($ php ứng dụng/console doctrine: generate: schema) tôi đã nhận một lỗi ..Symfony2 Lỗi: Không có tập tin bản đồ tìm thấy tên

 

    [Doctrine\ORM\Mapping\MappingException]                    
     No mapping file found named 'xxx.UserBundle.Entity.User.php' for class 'xxx\UserBundle\Entity\User'. 

Tôi chỉ có 2 Gói trong proyect:

  • UserBundle
  • FileBundle

tôi kết nối các FileBundle với U serBundle với mã này:

 

    
    /** 
    * @ORM\ManyToOne(targetEntity="xxx\UserBundle\Entity\User") 
    **/ 
    protected $user;  
 

Các tiêu đề của các tập tin là một cái gì đó như thế này:

 

    
    namespace xx\UserBundle\Entity; 

    use Doctrine\ORM\Mapping as ORM; 

    /** 
    * @ORM\Entity 
    **/ 
    class User 
    { ###...###} 
 

FileBundle rất giống .. Cảm ơn!

+0

tôi giả 'xxx' và' chỉ thay thế là xx', chúng là gì? –

+0

vâng, xin lỗi vì điều đó – quique150

+0

Tôi đã thêm câu trả lời ... nhưng đó là một cú sút dài :) –

Trả lời

0

Tôi không thể nghĩ ra lý do tại sao điều này xảy ra nhưng tôi sẽ thực hiện một bước nhảy vọt tại đây.

Thử chỉnh sửa config.yml của bạn. doctrine phần sẽ trông giống như sau:

doctrine: 
    dbal: 
     default_connection: my_connection_name 
     connections: 
      fmefb: 
       host:  %database_host% 
       dbname: %database_name% 
       user:  %database_user% 
       password: %database_password% 
       driver: %database_driver% 
       port:  %database_port% 
       charset: UTF8 

    orm: 
     default_entity_manager: my_entity_manager 
     entity_managers: 
      my_entity_manager: 
       connection: my_connection_name 
       mappings: 
        CompanyNameSiteBundle: ~ 
        CompanyNameAdminBundle: ~ 
        CompanyNameSomethingElse: ~ 

Lưu ý danh sách mappings ở dưới cùng. Tất cả các gói được "liên kết" đều được bao gồm ở đây.

Hope this helps ....

+0

tôi sử dụng $ php app/giao diện điều khiển: ánh xạ: thông tin Đã tìm thấy 1 thực thể được ánh xạ trong trình quản lý thực thể mặc định: [OK] xx \ FileBundle \ Entity \ File, bất kỳ ý tưởng? – quique150

4

Đó là bằng cách nào đó xa lạ với tôi rằng bạn đang sử dụng PHPDriver cho ORM và không AnnotationDriver, kể từ khi thông tin cơ sở dữ liệu của bạn trong lớp là trong các chú thích.

Nhưng dù sao, nếu lệnh php app/console doctrine:mapping:info chỉ cung cấp cho bạn 1 thực thể có nghĩa là gói khác của bạn có chứa Lớp người dùng không được tải trong tệp app/AppKernel.php. Tải UserBundle của bạn bằng cách thêm dòng

new xxx\UserBundle\xxxUserBundle(), 

vào hàm $bundles trong hàm registerBundles(). Sau đó, chức năng này sẽ trông giống như sau:

public function registerBundles() 
{ 
    $bundles = array(
     new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
     new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
     new Symfony\Bundle\TwigBundle\TwigBundle(), 
     new Symfony\Bundle\MonologBundle\MonologBundle(), 
     new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), 
     new Symfony\Bundle\DoctrineBundle\DoctrineBundle(), 
     new Symfony\Bundle\AsseticBundle\AsseticBundle(), 
     new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 
     new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(), 
     new xx\FileBundle\xxFileBundle(), 
     new xxx\UserBundle\xxxUserBundle(), 
    ); 

    if (in_array($this->getEnvironment(), array('dev', 'test'))) { 
     $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 
     $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 
     $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 
    } 

    return $bundles; 
} 

Tất nhiên, thay đổi 'xx' và 'xxx' bằng tên thật của bạn.

Hy vọng điều này sẽ hữu ích.

26

Bạn đang trộn các định dạng bản đồ Doctrine, bạn có nhiều chú thích và ít nhất một tập tin XML trong Tài nguyên/config/doctrine

Từ các tài liệu symfony:

"A bundle can accept only one metadata definition format. For example, 
it's not possible to mix YAML metadata definitions with annotated PHP 
entity class definitions." 

Vì vậy, giải pháp là:

Bạn không thể kết hợp các định dạng ánh xạ Doctrine khác nhau trong một gói nhất định. Vì vậy, hoặc sử dụng chú thích cho tất cả các thực thể hoặc sử dụng XML cho tất cả.

+0

Điều này giải quyết được vấn đề của tôi và nó vẫn là một hạn chế hợp lệ trong Symfony 2.1, xem symfony.com/doc/2.1/book/doctrine.html#add-mapping-information. Cảm ơn bạn –

+0

cảm ơn bạn, trung thực. điều này đã giúp tôi tiết kiệm được hàng giờ gỡ lỗi. Tôi sẽ không bao giờ sử dụng tự động tạo các đối tượng một lần nữa –

3

Tôi đồng ý với @ilanco 100%. Ngoài ra, giải pháp là loại bỏ bất kỳ.file xml trong thư mục, ví dụ:

C:\xampp\htdocs\localxyz\src\AppBundle/Resources/config/doctrine/Comment.orm.xml

những tập tin xml tạo ra khi bạn chạy lệnh như:

C:\xampp\htdocs\localxyz>php app/console doctrine:mapping:import --force AppBundle xml

Dũng.

1

Good day,

Mặc dù tôi biết rằng điều này đã được đăng tải năm trước, nhưng sẽ chỉ muốn gửi câu trả lời của tôi ở đây, có lẽ nó có thể giúp một ai đó :)

chỉ đơn giản là xóa bộ nhớ cache, nó làm việc cho tôi mặc dù

php bin/console cache:clear 

Cảm ơn

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