Symfony Sonata Admin - 在 listView 中添加字段类型 url 不起作用

Posted

技术标签:

【中文标题】Symfony Sonata Admin - 在 listView 中添加字段类型 url 不起作用【英文标题】:Symfony Sonata Admin - add field type url in listView not working 【发布时间】:2019-06-10 10:48:38 【问题描述】:

我正在尝试在实体的列表视图中添加字段类型 url,这是文档中的链接 -> https://symfony.com/doc/master/bundles/SonataAdminBundle/reference/field_types.html#url。

这是我的代码,我只是复制了文档:

protected function configureListFields(ListMapper $listMapper)

    $listMapper
            ->addIdentifier('name')
            ->add('url', 'url', [
                'url' => 'http://example.com'
            ]);

这似乎有效,但“Url”列始终为空。

我找到了负责渲染该字段的奏鸣曲模板 -> @SonataAdmin/CRUD/list_url.html.twig 。 这是代码

% extends get_admin_template('base_list_field', admin.code) %

% block field %
% spaceless %
   % if value is empty %
      
   % else %
      % if field_description.options.url is defined %
   ...

问题是value总是空的,不知道这个变量是什么;并且文档没有讨论任何名为 value 的字段。

【问题讨论】:

是的,它不起作用,我检查了一些 github 讨论。你可以做什么。创建您自己的自定义字段或将此 url 映射到对象(将其保存在 db 中)。 您能否向我们展示一下您实体中的 url 字段。另一方面,您编写了 ->add('url', ... 而不是 ->addIdentifier('url', ... @M.Galardi url 字段不在我的实体中,我想在列表中添加一个外部 url。我必须使用 ->add 而不是 ->addIdentifier,就像文档“不要使用带有 addIdentifier() 方法的 url 类型,因为它会创建无效的嵌套 URL。”中解释的那样。 @revengeance 你有讨论的链接吗?也许它们对于在 *** 上参考这个问题也很有用。 【参考方案1】:

因此,您可以通过创建一个模板来实现此目的,该模板仅包含一个带有您要链接到的 URL 的按钮。见下文:

首先我们在列表视图上定义一个引用模板的字段,类型为空:

->add('foo', null, [
    'template' => 'example/foobar.html.twig',
])

在我们刚刚引用的模板中,我们可以执行以下操作:

% extends '@SonataAdmin/CRUD/base_list_field.html.twig' %

% block field %
    <a class="btn btn-success" href="http://google.co.uk/">My Link</a>
% endblock %

现在您应该看到按钮在列表视图中显示为一列。

如果记录的建议按预期工作会很好,这个解决方案是一种解决方法。

【讨论】:

以上是关于Symfony Sonata Admin - 在 listView 中添加字段类型 url 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 3 Sonata Admin 使用注释创建管理员

CKEditorType 在 symfony sonata admin 中显示文本区域

Symfony 3 上的 Sonata Admin 实体翻译

Symfony 4 + Sonata + Sonata Doctrine ORM Admin Bundle:错误:没有要处理的元数据类

Symfony 4 覆盖 Sonata Admin CRUD 控制器

Symfony Sonata Admin 仅将属性显示为只读文本