2011-10-12 30 views
6

Tôi hiện đang tìm hiểu cách sử dụng khung symfony2.Mô hình không có quyền truy cập cơ sở dữ liệu trong symfony2

Đi qua cook book, tôi bắt đầu có hiểu biết cơ bản về cách mọi thứ phù hợp với nhau.

Tuy nhiên, tôi có 2 câu hỏi liên quan đến thực thể, mà tôi tin là các mô hình trong mô hình MVC:

  • Trong tài liệu hướng dẫn, dường như có rất nhiều thảo luận về các đơn vị sử dụng học thuyết như ORM. Nếu tôi có một thực thể/mô hình không yêu cầu bất kỳ ORM nào, điều này vẫn được coi là "thực thể"?

  • Trong hầu hết các hướng dẫn tôi đã thấy, các thực thể thường được ném vào một thư mục có tên "thực thể" trong gói ứng dụng. Với nhiều thực thể trong một ứng dụng, tôi cảm thấy rằng điều này có thể trở nên khá lộn xộn và không tổ chức. Làm thế nào tôi có thể nhóm và tổ chức các thực thể?

Cheers :)

Trả lời

3

liên quan đến câu hỏi của bạn làm thế nào để tổ chức các lớp học mô hình của bạn:

Bạn có thể thêm thư mục con để "Entity" thư mục, sau đó chỉ cần làm theo mà scructure trong định nghĩa namespace của bạn như:

<?php 

namespace Acme\SampleBundle\Entity\Subfolder\EntityClass 

liên quan đến câu hỏi của bạn để làm việc mà không có orm: đó là đơn giản, chỉ cần không sử dụng nó. các lớp học của bạn sẽ hoạt động giống như các lớp học "bình thường" ..

Nhưng bạn cũng sẽ cần một loại giao diện nào đó, như EntityManager trong Doctrine2.

Tôi luôn thích sử dụng ORM/ODM ..

trường hợp đó tôi chỉ sẽ thêm một phương pháp đơn giản để lớp thực thể của bạn:

<?php 

public function sendByEmail() { 

// Do stuff 
} 

Bạn không cần phải tồn tại (lưu vào DB) thứ gì cả. Lưu ý rằng trong symfony1.4 có một phương thức save() trên các thực thể. Trong công cụ Symfony2 được lưu thông qua $entityManager->persist($entity);

+1

Điều tôi muốn nói khi không sử dụng ORM là một số thực thể sẽ không chạm vào cơ sở dữ liệu, thay vào đó họ có thể đọc và ghi vào các tệp hoặc một số bộ nhớ khác. – F21

+0

AFAIK Doctrine ODM có thể ánh xạ tới xml Files rất tốt. Có lẽ thats usecase của bạn ... – mblaettermann

+0

Cảm ơn, không biết học thuyết có thể làm điều đó. Điều gì về các trường hợp mà tôi muốn thực thể của tôi xử lý và xác thực một số dữ liệu, nhưng thay vì lưu nó, nó sẽ gửi dữ liệu bằng email. Trong trường hợp này tôi vẫn nên sử dụng EntityManager? – F21

0

Khi bạn nói rằng bạn có một thực thể/mô hình mà không đòi hỏi bất kỳ ORM, làm bạn có nghĩa là:

  • Mô hình này là rất đơn giản để bạn có thể xây dựng truy vấn cơ sở dữ liệu của riêng bạn, HOẶC:
  • Dữ liệu có thể được lưu trữ thành các tệp thông thường

?

Nếu đây là trường hợp đầu tiên, bạn có thể quản lý nó theo ý muốn, nhưng thực hành tốt là sử dụng ORM.

Nếu đây là trường hợp thứ hai (như tôi giả định), bạn vẫn có các lớp Thực thể tốt hơn. Chỉ cần bạn liên kết với dữ liệu của bạn khác nhau bên trong các lớp học của bạn. Thay vì truy vấn cơ sở dữ liệu bạn tìm kiếm trong các tệp.

Bằng cách đó, bạn bảo tồn các phương pháp hay nhất và nếu một ngày nào đó bạn muốn chuyển sang mô hình DB, bạn sẽ chỉ phải thay đổi các lớp này.

Để trả lời câu hỏi thứ hai của bạn, tôi có mô hình 50+ pháp nhân và điều này không gây rối. Bên trong các lớp Entities, tôi nói cho người dùng biết nơi tìm mô hình mối quan hệ thực thể, vì vậy điều này là rõ ràng.

Điều này có giúp ích cho bạn không?

4

Thực thể là các mô hình được lưu trữ trong cơ sở dữ liệu quan hệ. Tài liệu là các mô hình được lưu trữ trong cơ sở dữ liệu tài liệu (ví dụ: MongoDB).

Nếu bạn không muốn bẻ cong mô hình của mình thành một không gian tên cụ thể tùy thuộc vào loại bộ nhớ bạn đang sử dụng, dưới đây là những gì tôi đề xuất. Tạo không gian tên Model cho các lớp mô hình của bạn. Nếu bạn chọn sử dụng cơ sở dữ liệu quan hệ, bạn mở rộng lớp mô hình của mình và đặt nó vào không gian tên Entity, cung cấp thông tin ánh xạ trong một tệp bên ngoài. Nếu sau đó bạn quyết định chuyển sang cơ sở dữ liệu tài liệu, bạn cũng làm như vậy, nhưng sử dụng không gian tên Document.

Để có ví dụ hay về ý tưởng này, hãy xem FOSUserBundle.

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