2012-10-18 129 views
0

我已經建立了自己的管理類來渲染一個自定義模板:SonataAdminBundle擴展模板

public function getTemplate($name) 
{ 
    switch ($name) 
    { 
     default: 

      case 'list': 

       return 'MyBundle:Admin:list.html.twig'; 

      break; 

      return parent::getTemplate($name); 

     break; 
    } 
} 

這是工作確定。我可以在模板文件中輸入一些html,並呈現OK。但是,我想從管理束中擴展現有的模板,因爲我只想對此實體進行一些小改動。

我已經添加了以下到我的模板文件:

{% extends 'SonataAdminBundle:CRUD:base_list.html.twig' %} 

但是這給了我以下錯誤:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 77 bytes) 

誰能告訴我什麼,我做錯了什麼?

回答

3

您的開關/外殼不正確。

它應該是:

public function getTemplate($name) 
    { 
     switch ($name) { 
      case 'list': 
       return 'MyBundle:Admin:list.html.twig'; 
       break; 

      default: 
       return parent::getTemplate($name); 
       break; 
     } 
    } 
+0

或者,你可以在這個例子中使用setter注入:http://blog.webdevilopers.net/override-list-view-twig-template-in-sonataadminbundle/ – webDEVILopers

+0

雖然switch語句的語法很有趣,但它是有效的(它將始終返回'MyBundle:Admin:list.html.twig'雖然)它不是什麼導致內存泄漏。 – Omn

0

我不知道如果你正在做什麼「錯誤」(除了怪異的情況下,語法沒有做什麼,我想你認爲它,請參閱http://php.net/manual/en/control-structures.switch.php和向下滾動至描述'break'聲明重要性的部分)。

看起來好像有可能在擴展模板時將symfony放在無限循環中。我已經看過幾個模板。我還沒弄清楚是什麼觸發了它,但我認爲它與使用EasyExtends進行軟件包繼承有關。在我的應用程序有一個孩子奏鳴曲管理員束:

class ApplicationSonataAdminBundle extends Bundle 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function getParent() 
    { 
     return 'SonataAdminBundle'; 
    } 
} 

然後我已經覆蓋了standard_layout.html.twig只有內容:

{% extends "SonataAdminBundle::standard_layout.html.twig" %} 

這是造成「SonataAdminBundle :: standard_layout。 html.twig「被加載無數次,因爲模板似乎有效地擴展自己。

假設您的設置與我的類似。我懷疑嘗試做你正在嘗試做的唯一方法是使用不同的模板名稱(例如「my_standard_layout.html.twig」),然後將該模板設置爲應用程序範圍的默認值,如下所述:https://sonata-project.org/bundles/admin/master/doc/reference/templates.html#configuring-templates