7

How would I pass an array of variables to SonataMediaBundle:MediaAdmin:list_image.html.twig?
There does not seem to be any option available.

class MediaAdmin extends Admin
{
    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('id')
            ->add('image', 'string', array(
                'template' => 'SonataMediaBundle:MediaAdmin:list_image.html.twig',
                array('data'=>'something')<<- This is not working
            ))
            ->add('custom', 'string', array(
                'template' => 'SonataMediaBundle:MediaAdmin:list_custom.html.twig'
            ))
        ;
    }
}

Template:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field%}
    {{dump(data)}}     <<- This is not working
{% endblock %}

I just want to pass a variable value to SonataMediaBundle:MediaAdmin:list_image.html.twig.

cezar
  • 11,616
  • 6
  • 48
  • 84
wilsonrufus
  • 449
  • 1
  • 5
  • 14

5 Answers5

17

Just elaborating Tigran's answer.

class MediaAdmin extends Admin
{
    public $data = '';

    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('id')
            ->add('custom', 'string', array('template' => 'SonataMediaBundle:MediaAdmin:list_custom.html.twig'))
        ;
        $this->data = 'something';
    }
}

and in your template:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field %}
    <div>
        {{ admin.data }}
    </div>
{% endblock %}

and if you have an array indexed by object's id, you can access it this way:

  {{ attribute( admin.data, object.id) }}
Michall
  • 191
  • 1
  • 5
3
class MediaAdmin extends Admin

{
    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('id')
            ->add('image', 'string', array('template' => 'SonataMediaBundle:MediaAdmin:list_image.html.twig','data'=>'something'))
            ->add('custom', 'string', array('template' => 'SonataMediaBundle:MediaAdmin:list_custom.html.twig'))
        ;
    }
}

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field %}
    {{field_description.options.data}}
{% endblock %}
Azam Alvi
  • 6,918
  • 8
  • 62
  • 89
1

Let try this solution : AdminClass :

protected function configureListFields(ListMapper $listMapper){
    ->add('_action', 'actions', [
        'actions' => [
            'replay' => [
                'template' => 'MyAdminBundle:CRUD:list__action_replay.html.twig',
                'data' => 'My custom datas pass to the template'
            ]
        ]
    ]);
}

Template list__action_replay.html.twig

{{ dump(field_description.options.actions.replay.data)}}

Have fun just with :

{{ dump(field_description.options)}}
nono
  • 101
  • 4
0

Put custom data to an member of admin class . then call it from list field template.

public $customData = array(1,2,3);

Then in twig call it.

0

Be Aware of renamed variables. My 5 cents. Versions: Symfony 2.6, Sonata Admin 2.3

I was overriding sonata_type_collection_widget. I did set variable in Admin class, but lost an hour trying to figure out how to access admin variable. Actually you can call methods and access variables from admin class.

Here's how it's done in 2.3:

{% block sonata_type_collection_widget %}
    {{ dump(sonata_admin.admin.test1) }}
{% endblock sonata_type_collection_widget %}
Anton Valqk
  • 747
  • 6
  • 11