2012-05-29 17 views
5

Tôi mới phát triển web với Symphony2 (mặc dù chắc chắn không mới phát triển web) và tôi sắp bắt đầu một dự án có kích thước trung bình, sẽ được cắt thành các gói , vì mỗi lần cài đặt ứng dụng có thể có một thiết lập chức năng có sẵn khác.Symfony 2 - Tạo các mục trình đơn từ các gói có sẵn

Tôi muốn tạo điều hướng động của mình từ các gói có sẵn, ví dụ: nếu gói "foo" được kích hoạt, một mục trình đơn với một tuyến đường đến hành động điều khiển chính foo sẽ xuất hiện.

Thông thường, việc tôi thực hiện việc này là tạo một singleton ở đâu đó, sau đó tôi sẽ điền vào trong hàm load() của một bó, và trong khi kết xuất, tôi sẽ xuất ra singleton.

Nhưng symfony2 cung cấp tính linh hoạt cao ở phần này, vì vậy tôi hiện đang đánh giá xem có cách nào tốt hơn không.

Dịch vụ có thể là một cách để đến đây không? Hoặc sự kiện? Hoặc một cái gì đó với tiêm phụ thuộc, do đó, các bó có được một thể hiện của một NavigationConfigurationElement tại thời gian xây dựng?

Bất kỳ đầu vào hoặc suy nghĩ nào về điều này hoặc có thể một số liên kết đến các ví dụ về cách thực hiện việc này, sẽ được đánh giá cao.

Trân trọng, Jens

Trả lời

6

i điều là cách tốt nhất để làm điều đó, là sử dụng tiêm phụ thuộc thẻ. bạn sẽ phải tạo một phần mở rộng tiêm phụ thuộc và cung cấp một "thẻ" có thể được sử dụng bởi các bó khác nhau để đăng ký các mục trình đơn của họ.

tôi sẽ không mô tả cho bạn toàn bộ quy trình tại đây vì có rất nhiều tài nguyên về điều đó trên internet.

nhưng để cung cấp cho bạn một phác thảo nhanh chóng phải làm gì

  1. thực hiện một dịch vụ tổ chức các mục menu (singleton bạn nơi nói về)
  2. trình thẻ bằng cách thực hiện một trình biên dịch thông qua, trình biên dịch này vượt qua sẽ tìm tất cả các dịch vụ được gắn thẻ với lớp điều hướng và đăng ký chúng với dịch vụ menu
  3. tạo chức năng ghép nối sẽ sử dụng dịch vụ để truy xuất trình đơn và hiển thị nó
  4. viết các gói sử dụng thẻ và cung cấp các mục menu

đây là một số tài nguyên có thể giúp bạn:

http://symfony.com/doc/current/components/dependency_injection/tags.html http://miguel.ibero.me/es/post/2012-04-28/adding-tags-to-symfony.html

tôi hiện đang thực hiện một bó Solr cho rằng symfony sử dụng DI thẻ là tốt. tôi có một lớp được gọi là IndexManager quản lý các chỉ số solr khác nhau từ các gói khác nhau. tôi sử dụng thẻ DI để các gói khác có thể đăng ký nội dung/thực thể mà họ muốn được lập chỉ mục trong solr. nguyên tắc cũng giống như với các mục menu.

thấy ở đây: https://github.com/roomthirteen/Room13SolrBundle

các tập tin quan trọng là:

thêm trình biên dịch thông qua: https://github.com/roomthirteen/Room13SolrBundle/blob/master/Room13SolrBundle.php trình biên dịch vượt qua bản thân: https://github.com/roomthirteen/Room13SolrBundle/blob/master/DependencyInjection/Compiler/SolrCompilerPass.php

hy vọng rằng sẽ giúp. thêm bất kỳ nhiệm vụ nào nữa? đừng ngần ngại hỏi.

+0

Điều đó nghe rất thú vị và có lẽ giống như cách symfony'ish nhất để làm điều đó. Tôi sẽ kiểm tra nó và thử nó, và lấy lại cho bạn nếu nó làm việc như tôi nghĩ. Rằng bạn rất nhiều cho đầu vào của mình! – jhoffrichter

+0

không có prob. Nếu bạn nghĩ câu trả lời này đúng, hãy gắn cờ nó;) – room13

+0

Ngay sau khi tôi đã đánh giá nó, tôi sẽ :) – jhoffrichter

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