2013-03-27 60 views
1

我會盡可能地將其解釋清楚。我正在研究一個相當大的項目,並創建了一個CrudController。此控制器有一些默認操作(indexAction,createAction,archiveAction ...)。我也創建了一些相應的視圖。渲染循環中的項目,在CRUD視圖中的選項

  • edit.html.twig視圖將繪製形式與form_widget()函數
  • list.html.twig視圖得到的數據陣列和一個(可配置)列陣列。這會繪製一張簡單的表格,其中包含一些操作按鈕(默認情況下爲編輯和歸檔按鈕)所需的列

這個想法是,我現在能夠快速開發我的應用程序:我創建一個新的實體,存儲庫,FormType和最後一個擴展CrudController而不是BaseController的控制器。在我的EntityController中,我確定我的CrudController的配置是正確的(實體名稱,指向FormType的指針...)。這一切都像一個魅力。但是,我已經到了需要一些額外操作(除編輯和存檔之外)的實體(項目),即「渲染」或「下載」(渲染完成時)的點。 因爲我不想完全覆蓋這個實體的列表視圖,只是爲了添加額外的操作,而且我會再次遇到這個場景,所以我決定嘗試將列表視圖中的操作呈現出來:我創建了一個actions.html.twig視圖,該視圖僅根據給定項目的狀態(是否顯示渲染按鈕或下載按鈕?)來渲染操作和將添加其他操作的actionsAction

在我list.html.twig我用:

{% for row in data %} 
    {{ render(controller(entityControllerActionsAction, {'id': row.id})) }} 
    ... 
{% endfor %} 

然而,事實證明,使相當內存豬,並儘快正如我在列表中顯示的一些實體,它會導致「內存耗盡」錯誤。一個僅在12MB前使用的頁面突然使用超過128MB(內存限制),這是不可接受的。此外,加載時間大量增加

我正在尋找一個體面的,面向對象的,DRY解決這個問題。

  • 是否有一個原因,爲什麼render()函數會是這樣的內存和性能豬?如果我能減少這個問題,問題就會解決。
  • 會有一種方法來模仿render()函數或使用不同的東西。

我不是在尋找預建的代碼或任何東西,而是建議在哪個方向繼續。感謝您的時間。

+0

我記得ZF1有一個類似的問題:如果我沒有記錯的話,使用partials引用大量使用過的內存作爲視圖的新實例。你可以使用塊結構嗎:定義一個默認的動作塊並覆蓋它的項目實體? – herrjeh42 2013-03-27 10:21:46

+0

這是我確實在考慮的一件事,但是,這意味着創建一個新的視圖來擴展crud列表視圖。這是免費的一點麻煩,但可能是最好的解決方案。 – Bram 2013-03-27 10:32:33

+0

嗯,看看這個問題,它是我猜,「渲染」產生一個新的請求:http://stackoverflow.com/questions/9077097/twig-render-vs-include - 我將它添加爲作爲進一步參考的答案。 – herrjeh42 2013-03-27 10:36:28

回答

0

正如Stackoverflow post中所述,「渲染」會產生新的請求並因此增加內存使用量。嘗試使用代替默認動作塊的塊結構。覆蓋項目實體的這個。