wilsonrufus
wilsonrufus

Reputation: 449

How to pass variables to sonata admin custom list action?

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.

Upvotes: 7

Views: 12610

Answers (5)

nono
nono

Reputation: 141

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)}}

Upvotes: 1

Azam Alvi
Azam Alvi

Reputation: 7055

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 %}

Upvotes: 3

Anton Valqk
Anton Valqk

Reputation: 747

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 %}

Upvotes: 0

Michall
Michall

Reputation: 191

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) }}

Upvotes: 17

Tigran Azatyan
Tigran Azatyan

Reputation: 52

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.

Upvotes: 0

Related Questions