2012-03-19 23 views
6

Phương pháp được khuyến nghị truy cập vào các tiện ích liên tục Plone là gì và tại sao?getToolByName() và những người khác

  • getToolByName (bối cảnh, "portal_url")

  • mua trực tiếp: context.portal_url

  • Itools giao diện

, vv

+1

Và các phương pháp plone.api mới nhất - http://readthedocs.org/docs/ploneapi/en/latest/utilities.html#get-tool –

+2

I vẫn xem xét plon e.api một chút experimentetanl và do đó không khuyến khích ... tôi cũng muốn biết cái nhìn sâu sắc đằng sau câu trả lời –

Trả lời

5

Tôi nghĩ rằng câu trả lời nằm trong mã số getToolByName chính nó (http://svn.zope.org/Products.CMFCore/trunk/Products/CMFCore/utils.py?view=markup). Đó là phương pháp thực hiện điều này:

  • như một nỗ lực đầu tiên nó sẽ cố gắng để có được những công cụ mong muốn bằng cách nhìn lên cho giao diện với getUtility và bao gồm nó trong một ngữ cảnh (mà dường như là một điều tốt đối với tôi)
  • như một dự phòng nó cố gắng để trực tiếp mua lại các công cụ từ bối cảnh nguồn

vì vậy, phương pháp duy nhất "để cai trị tất cả" có vẻ là: getToolByName Nhưng, như @keul nói, có cũng là bộ nhớ đệm có liên quan, và tìm kiếm ở đây (http://collective-docs.readthedocs.org/en/latest/misc/context.html#itools-interface) rõ ràng là sử dụng giao diện ITools, khi nó không thành công do các công cụ chưa triển khai giao diện đó, nó nhanh hơn.

Đối với những lý do trên, cuối cùng tôi muốn đề nghị:

  1. Itools (nhanh hơn)
  2. getToolByName (an toàn hơn)

(như việc mua lại trực tiếp đã được xét xử bởi các getToolByName, nếu nó không thành công, bạn sẽ không có nhiều tài sản)

+1

Tôi tự hỏi tại sao getToolByName không truy vấn ITools trước. –

+0

vì 'getToolByName' là một phương thức trong gói CMFCore trong khi' ITool' là một giao diện trong 'plone.app.layout'. Như tên miền của nó chỉ ra, p.a.layout nó là một gói cấp cao hơn và nó là Plone cụ thể. –

2

Việc sử dụng Itools các tiện ích phải là phương pháp tốt nhất, vì chúng được lưu trong bộ nhớ cache. Tuy nhiên điều này đôi khi đã cho tôi vấn đề (liên quan đến công cụ portal_membership, nhưng tôi không nhớ chi tiết) vì vậy trong trường hợp hiếm hoi tôi chuyển sang getToolByName. Điều cuối cùng là việc mua lại trực tiếp.

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