Администратор Symfony Sonata - добавить URL-адрес типа поля в listView не работает

я пытаюсь добавить 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» всегда пуст.

введите здесь описание изображения

Я нашел шаблон Sonata, который отвечает за отображение этого поля -> @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.


person Bellu    schedule 16.01.2019    source источник
comment
Да, это не работает, я проверил несколько обсуждений на github. Что ты можешь сделать. Либо создайте свое собственное настраиваемое поле, либо сопоставьте этот URL-адрес с объектом (сохраните его в БД).   -  person revengeance    schedule 16.01.2019
comment
Можете ли вы показать нам поле URL в вашей сущности, пожалуйста. С другой стороны, вы написали -›add('url', ... вместо -›addIdentifier('url', ...   -  person M. Galardi    schedule 16.01.2019
comment
@M.Galardi M.Galardi Поле URL-адреса отсутствует в моем объекте, я хочу добавить внешний URL-адрес в список. Я должен использовать -›add, а не -›addIdentifier, как описано в документации. Не используйте тип URL с методом addIdentifier(), потому что это создаст недопустимые вложенные URL-адреса.   -  person Bellu    schedule 16.01.2019
comment
@revengeance у вас есть ссылки на обсуждения? Возможно, они также могут быть полезны для ссылки на эту проблему в Stackoverflow.   -  person Bellu    schedule 16.01.2019


Ответы (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 %}

и теперь вы должны увидеть, что кнопка отображается в виде столбца в представлении списка.

Было бы неплохо, если бы задокументированное предложение работало как задумано, это решение является обходным.

person MylesK    schedule 16.01.2019