如何将JS代码添加到实体表单?
Posted
技术标签:
【中文标题】如何将JS代码添加到实体表单?【英文标题】:How to add JS code to entity form? 【发布时间】:2012-04-25 21:58:47 【问题描述】:我有一个实体。当实体在弹出窗口中加载时,我需要执行一些 JS 代码。 有没有办法通过管理类配置将自定义 JS/html 代码添加到实体表单。例如。将模板作为选项传递
【问题讨论】:
【参考方案1】:你可以这样做:-
像这样在你的 FormMapper 中添加一个类参数:-
受保护的函数 configureFormFields(FormMapper $formMapper) $formMapper ->add('description', null, array('attr' => array('class' => 'for_popup'), 'required' => false))
从 Sonata CRUD 模板扩展 edit.html.twig
/ base_edit.html.twig
---edit.html.twig----
% extends 'YourBundle:YourAdminClass:base_edit.html.twig' %
---base_edit.html.twig---
% block javascripts %
parent()
<script type="text/javascript">
// Your JS code here
</script>
% endblock %
使用您的edit.html.twig
代替 Sonata CRUD,方法是在 getEditTemplate 函数中定义它(在您的 Admin 类中)。
public function getEditTemplate()
return 'YourAdminBundle:ControllerName:edit.html.twig';
您还可以在注入管理服务时设置自定义编辑模板。
<service id="sonata.admin.bf" class="Wyzbiz\Bundle\MainBundle\Admin\BfAdmin">
<tag name="sonata.admin" manager_type="orm" group="Content" label="BFs"/>
<argument />
<argument>Wyzbiz\Bundle\MainBundle\Entity\Bf</argument>
<argument>WyzbizMainBundle:CRUD</argument>
<call method="setTranslationDomain"><argument>WyzbizMainBundle</argument></call>
<call method="setTemplate"><argument>list</argument>
<argument>WyzbizMainBundle:CRUD/Bf:list.html.twig</argument></call>
</service>
【讨论】:
base_edit 应该扩展奏鸣曲 crud 模板吗?我应该在这个模板中指定扩展标签,或者我可以把这个模板放在与奏鸣曲包中相同的路径?感谢您的帮助 在奏鸣曲中不要碰任何东西。只需将奏鸣曲的 base_edit.html.twig 复制到 YourBundle/Resources/YourController/ 文件夹中。我将更新答案以解释如何。 Sonata 显然已经用 getTemplate('edit') 替换了 getEditTemplate() 函数,这使得这变得更加困难。我最终做的是: $this->setTemplate('edit', 'MyBundle:Admin:edit_user.html.twig');在我管理员的 configureFormFields() 中 此外,您的 edit.html.twig 文件可以扩展奏鸣曲管理员的 CRUD edit.html.twig 并且可以包含 javascript 块(换句话说,您不需要创建自己的 base_edit 版本.html.twig 并扩展,直接扩展 Sonata admin 的 edit.html.twig 即可)【参考方案2】:@Jessica 您可以添加自己的 getTemplate 方法实现,而不是在管理类的 configureFormFields 方法中使用 $this->setTemplate(),我的方法如下所示:
/**
* Override core method to display custom template(s)
*/
public function getTemplate($name)
switch ($name)
case 'edit':
return 'YourAdminBundle:YourAdminEntity:edit.html.twig';
break;
default:
return parent::getTemplate($name);
break;
【讨论】:
以上是关于如何将JS代码添加到实体表单?的主要内容,如果未能解决你的问题,请参考以下文章