2013-10-11 12 views
5

Tôi đã đọc bài viết này:Symfony2 - doctrine: schema: cập nhật không thành công với thực thể bên ngoài của một bó (tách riêng)

http://danielribeiro.org/yes-you-can-have-low-coupling-in-a-symfony-standard-edition-application/

Tác giả nói rằng nó có thể có loại artitcture cho dự án :

src/ 
└── Vendor/ 
    └── Product/ 
     └── Bundle 
      └── BlogBundle/ 
      └── ForumBundle/ 
      └── SiteBundle/ 
       └── Controller/ 
        └── IndexController.php 
       └── Resources/ 
        └── views/ 
         └── index.html.twig 
       └── ProductSiteBundle.php 
     └── Entity 
      └── User.php 
     └── Repository 
      └── UserRepository.php 
     └── Service 
      └── UserPasswordRetrievalService.php 

vì vậy tôi tiếp bài viết và kết thúc với một cái gì đó như thế này:

src/ 
└── Product/ 
    └── Bundle 
     └── SiteBundle/ 
      └── Controller/ 
       └── IndexController.php 
      └── Resources/ 
       └── views/ 
        └── index.html.twig 
      └── ProductSiteBundle.php 
    └── Entity 
     └── User.php 

Bây giờ Symfony không thể nhìn thấy user.php của tôi tác giả không đề cập đến nếu tôi có thêm bất kỳ mã thêm để thực hiện việc này, và bây giờ tôi nhận được lỗi này:

MappingException: The class 'Product\Entity\User' was not found in the chain configured namespaces OtherNameSpaces 

CẬP NHẬT

Vì vậy, tôi đã xóa mã hiện tại của mình. và Did một cái gì đó như thế này:

src/ 
└── Product/ 
    └── Bundle 
     └── SiteBundle/ 
      └── Controller/ 
       └── IndexController.php 
      └── Resources/ 
       └── views/ 
        └── index.html.twig 
      └── ProductSiteBundle.php 
    └── Entity 
     └── User.php 

user.php

namespace Product\Entity; 

/** 
* @ORM\Entity 
* @ORM\Table(name="users") 
*/ 
class User 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    public function __construct() 
    { 
     parent::__construct(); 

    } 
} 

và sau đó

php app/console doctrine:schema:update --force //No Metadata Classes to process. 

có vẻ như Symfony là không nhận thức được thư mục đó ở tất cả. có nơi nào tôi có thể yêu cầu symfony nhìn vào bên trong thư mục đó không?

+0

namespace của bạn trong user.php là gì? – Tib

+0

'không gian tên Sản phẩm \ Entity' @Tib – trrrrrrm

+0

@nifr câu trả lời là đúng trên đầu trang của nó. Bài viết của tôi, nơi bạn lần đầu tiên nghe nói về thực hành này, không giải thích (về mục đích) cách bạn làm điều đó trong nội bộ. –

Trả lời

11

A good blog article bởi Jakub Zalas mô tả cách ánh xạ các thực thể sống bên ngoài gói.

Bạn cần thêm theo cách thủ công nơi học thuyết sẽ tìm thông tin bản đồ như được hiển thị bên dưới.

Điều này làm cho thông tin bản đồ có sẵn cho lệnh doctrine:schema:update. Đừng quên xóa bộ nhớ cache của bạn sau khi thay đổi cấu hình.

# app/config/config.php 
doctrine: 
    orm: 
     # ... 
     mappings: 
      Acme: 
       type: annotation 
       is_bundle: false 
       dir: %kernel.root_dir%/../src/Acme/Entity 
       prefix: Acme\Entity 
       alias: Acme 

Bây giờ bạn có thể truy cập vào kho như thế này (vì định nghĩa bí danh):

$entityManager->getRepository('Acme:YourEntity'); 
+0

đã hoạt động hoàn hảo, Cảm ơn! – trrrrrrm

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