我正在尝试获取和操纵与SonataAdmin中的ImageAdmin类相关的实际对象(使用Symfony 2.3).当ImageAdmin类是唯一使用的类时,这很好.但是当ImageAdmin嵌入另一个管理员时,它出现了可怕的错误.
当您没有嵌入式管理员时,这是有效的:
class ImageAdmin extends Admin {
protected $baseRoutePattern = 'image';
protected function configureFormFields(FormMapper $formMapper) {
$subject = $this->getSubject();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当您使用以下方法在ParentAdmin中嵌入ImageAdmin时:
class PageAdmin extends Admin {
protected function configureFormFields(FormMapper $formMapper) {
$formMapper->add('image1', 'sonata_type_admin');
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当您编辑ID为10的父项并在ImageAdmin中调用getSubject()时,您将获得ID为10 的图像!
换句话说,getSubject()从URL中提取id然后调用$this->getModelManager()->find($this->getClass(), $id);,它交叉引用Parent id和Image id.哎呀!
所以...我想要做的是能够掌握当前ImageAdmin实例中正在渲染/编辑的实际对象,无论是直接编辑还是通过嵌入的表单编辑,然后能够做到它.
也许getSubject()是错误的树,但我注意到$this->getCurrentChild()从ImageAdmin :: configureFormFields()调用时返回false,即使使用sonata_type_admin字段类型嵌入ImageAdmin也是如此.我很困惑......
无论如何,我希望有可能以一种我忽略的显而易见的方式抓住这个对象,这里有人可以帮助启发我!
我有一个带有某些表单字段的Sonata Admin类,但是我想使用该FormEvents::PRE_SET_DATA事件根据绑定数据动态添加另一个表单字段。
但是,我遇到了几个问题:
1)我可以找到将表单字段添加到管理员中正确的'formGroup'的唯一方法是两次添加新字段(一次通过formMapper,一次通过表单本身)...这似乎很错误,我无法控制它在formGroup中出现的位置。
2)添加的元素似乎不知道它具有连接的Admin(可能是因为它是使用来添加的Form::add())。这意味着,除其他外,由于它触发了{% if sonata_admin is not defined or not sonata_admin_enabled or not sonata_admin.field_description %}条件,因此它与表单中的其他字段的呈现方式不同。form_admin_fields.html.twig
因此,这使我相信我做错了所有事情,必须有更好的方法。
所以...
使用SonataAdmin时,使用FormEvent将字段添加到表单组中的理想位置的理想方法是在该组中的首选位置?
这是一些代码,FWIW ...
protected function configureFormFields(FormMapper $formMapper)
{
$admin = $this;
$formMapper->getFormBuilder()->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($admin, $formMapper) {
$subject = $event->getData();
// do something fancy with $subject
$formOptions = array(/* some cool stuff*/);
// If I don't add the field with the $formMapper then the new field doesn't appear on the rendered form …Run Code Online (Sandbox Code Playgroud) 我有第三方包OriginalBundle,我想自定义其中的一些模板.
为此,我MyCustomBundle使用Symfony文档中显示的覆盖方法设置了Symfony包.
<?php
namespace My\CustomBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class MyCustomBundle extends Bundle
{
public function getParent()
{
return 'OriginalBundle';
}
}
Run Code Online (Sandbox Code Playgroud)
然后我使用MyCustomBundle从OriginalBundle创建一些Twig模板的重载版本.但是,我希望能够从我的版本访问原始模板(例如扩展它)并且只是覆盖一些块.
但是,如果我尝试做这样的事情:
{# MyCustomBundle:Foo:bar.html.twig #}
{% extends 'OriginalBundle:Foo:bar.html.twig' %}
{% block xyz %}
{# ... code in here ... #}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
然后我得到一个白色的死亡屏幕.我猜它会导致某种递归,因为Symfony extends将回调路由回自定义文件?
原始包的模板如下所示:
{# OriginalBundle:Foo:bar.html.twig #}
{% block abc %}
{% block xyz %}
{# ... code in here ... #}
{% endblock %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
那么问题......
当存在相同模板的过度版本时,有没有办法访问原始模板文件?
我基本上是在寻找相当于Twig …
我想在Bitnami LAMP堆栈系统上看到PHP-FPM状态页面.
但是,当我尝试时,我得到一个空白页面,或者说错误:
Request exceeded the limit of 10 internal redirects due to probable configuration error.
Run Code Online (Sandbox Code Playgroud)
那么我需要做些什么来让它工作?
是否有任何“内置”方式来json_array使用 Sonata Admin管理 Doctrine字段?
我在 Symfony / Sonata 文档(或代码)中找不到任何有用的文档(或相关代码),但我希望我错过了一些东西!
理想情况下,我希望看到序列化的键/值对,可以删除它们中的任何一个并添加一些新的,但我想我将不得不自己写出来......
我查看了所有可以找到的报告文档和各种MWS操作,但我不能在我的生活中找到任何方法来检索我们目前的SKU当前设置的销售价格,销售开始日期和销售结束日期抛售.
澄清:我正在尝试检索销售价格,而不是标准的"上市价格".当通过卖家中心直接编辑项目时,这些字段会被标记Sale Price,Sale From Date并且Sale End Date.哪个与主要价格分开,后者标有Your price.
我的搜索功能是否缺乏,或者这些信息是否无法通过MWS检索(直接或通过某些报告或其他报告)?
非常感谢!
C
symfony ×4
sonata-admin ×3
php ×2
amazon-mws ×1
apache ×1
bundle ×1
doctrine-orm ×1
forms ×1
inheritance ×1
lamp ×1
linux ×1
twig ×1