2013-03-17 27 views
7

Có khả năng sử dụng phương thức generateUrl() ngoài bộ điều khiển không?generateUrl nằm ngoài bộ điều khiển

Tôi đã cố gắng sử dụng nó trong lớp lưu trữ tùy chỉnh với $this->get('router'), nhưng nó không hoạt động.

cập nhật

Tôi đã tìm thấy một giải pháp tạm thời ở đây:

http://www.phamviet.net/2012/12/09/symfony-2-inject-service-as-dependency-in-to-repository/

tôi tiêm container dịch vụ toàn vào kho lưu trữ của tôi, mặc dù nó "không được khuyến khích".

Nhưng nó hoạt động ngay bây giờ.

Update2

Tiêm định tuyến thay vì toàn bộ thùng chứa có lẽ là một ý tưởng tốt hơn :)

+0

http://stackoverflow.com/questions/10057309/generate-a-link-from- a-service –

Trả lời

8

Không bơm container vào kho lưu trữ của bạn ... Thực sự, đừng!

Nếu tôi là bạn, tôi sẽ tạo một dịch vụ và đưa bộ định tuyến vào đó. Trong dịch vụ này, tôi sẽ tạo một phương thức, sử dụng kho lưu trữ và thêm mã cần thiết bằng cách sử dụng bộ định tuyến.

Đó là cách ít bẩn và dễ sử dụng/hiểu cho nhà phát triển khác.

+0

injecting chỉ router cũng là một ý tưởng tồi? –

+1

Đó là một ý tưởng tốt hơn nhưng tiếc là vẫn không phải là một ý tưởng tốt: < mục đích kho là viết một số truy vấn tùy chỉnh, không làm công cụ như chuyển hướng. – Gmajoulet

+0

Gmajoulet, có thể một số liên kết đến tài liệu sẽ giúp –

11

Nếu bạn có một cái nhìn trong the source code of Controller::generateUrl(), bạn sẽ thấy như thế nào nó được thực hiện:

$this->container->get('router')->generate($route, $parameters, $referenceType); 

Về cơ bản bạn chỉ cần nhập tên của tuyến đường ($route tại đây); nếu tồn tại, một số tham số ($parameters) và loại tham chiếu (một trong các hằng số của UrlGeneratorInterface)

+1

Nhưng $ this-> container cũng không có sẵn trong kho. Làm thế nào để tôi vượt qua container cho họ? –

+0

Bạn hoàn toàn bỏ lỡ điểm của câu hỏi trong câu trả lời này !! Sử dụng "" này "giả định rằng bạn đang ở trong bộ điều khiển. – cartbeforehorse

+2

@cartbeforehorse không, asum này giả định của bạn trong một đối tượng có thể được instantiated ... –

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