- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 symfony 3.4 和奏鸣曲媒体包。在表单中使用 MediaType 效果很好,如下所示:
$this->builder->->add('document', MediaType::class,
['label' => 'Document',
'provider' => 'sonata.media.provider.file',
'context' => 'default']) ;
现在我想修改 MediaType 生成的字段。
我刚刚将 Twig 模板 \vendor\sonata-project\media-bundle\src\Resources\views\Form\media_widgets.html.twig 复制到我的项目 (\AppBundle\SonataMediaBundle\views\Form)现在我可以修改布局了。这么长时间以来,一切都工作得很好。
模板最终使用{{ block('form_widget') }}写出上传按钮和复选框来删除上传的文件(包括标签)。这是在 buildForm 方法中的 \sonata-project\media-bundle\src\Forms\Type\MediaType.php 类中完成的。
现在我想修改这个buildForm方法。修改供应商包中的类不是一个好的做法,因此我想创建一个新类来扩展 MediaType 类并覆盖 buildForm 方法,如下所示:
namespace AppBundle\Form\SonataMediaBundle ;
class MyMediaType extends \Sonata\MediaBundle\Form\Type\MediaType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
... copy code from original MediaType class and modify it after my needs ...
... e.g. just remove the unlink checkbox ...
}
}
我收到一条错误消息无法 Autowiring 服务“AppBundle\Form\SonataMediaBundle\EwMediaType”:方法“Sonata\MediaBundle\Form\Type\MediaType::__construct()”的参数“$pool”引用类“Sonata\MediaBundle\Provider\Pool”但不存在这样的服务。您也许应该将此类别名为现有的“sonata.media.pool”服务。
我认为我必须先进行一些配置,然后才能在我自己的项目中扩展 MediaType。我在 services.yml
中尝试使用以下代码Sonata\MediaBundle\Provider\Pool:
tags: ['sonata.media.pool']
但是现在又出现了一个错误:无法 Autowiring 服务“AppBundle\Form\SonataMediaBundle\EwMediaType”:方法“Sonata\MediaBundle\Form\Type\MediaType::__construct()”的参数“$class”没有类型提示,您应该配置其值明确地。
我对 symfony 很陌生,对其配置不太熟悉。谁能帮我列出我需要执行的步骤,以便我可以扩展和修改 MediaType 类?
非常感谢。
萨沙
最佳答案
您可以执行以下操作。您需要创建自定义服务定义。
AppBundle\Form\Type\CustomMediaType:
class: AppBundle\Form\Type\CustomMediaType
autowire: true
autoconfigure: true
arguments:
- "@sonata.media.pool"
- "Application\\Sonata\\MediaBundle\\Entity\\Media"
然后在您的 CustomMediaType 中按照正常方式创建表单类型..
namespace AppBundle\Form\Type;
use Sonata\MediaBundle\Form\Type\MediaType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\UrlType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class CustomMediaType extends MediaType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
]);
}
public function getBlockPrefix()
{
return 'custom_media_type';
}
public function getParent()
{
return MediaType::class;
}
}
然后在您的 Twig 内含物中的某个位置,您可以添加自定义 HTML...
{% block custom_media_type_widget %}
// Your HTML here
{% endblock %}
关于symfony - 奏鸣曲媒体包修改 MediaType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50432314/
我已经要求了一段时间了。不敢相信没有一个开发人员不知道答案,我有点绝望 在Sonata中,我无法使url结构/模式/parent/ID/child/list起作用。通过了非常非常差的4.6。奏鸣曲文档
编辑:对于对解决同一问题感兴趣的任何人,都可以解决问题: echo `'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini`
我是一名优秀的程序员,十分优秀!