Troubleshooting
===============

The toString method
-------------------

Sometimes the bundle needs to display your model objects, in order to do it,
objects are converted to string by using the `__toString`_ magic method.
Take care to never return anything else than a string in this method.
For example, if your method looks like that :

.. code-block:: php

    public function __toString()
    {
        return $this->getTitle();
    }


You cannot be sure your object will *always* have a title when the bundle will want to convert it to a string.
So in order to avoid any fatal error, you must return an empty string
(or anything you prefer) for when the title is missing, like this :

.. code-block:: php

    public function __toString()
    {
        return $this->getTitle() ?: '';
    }


.. _`__toString`: http://www.php.net/manual/en/language.oop5.magic.php#object.tostring


Large filters and long urls problem
-----------------------------------

If you will try to add hundreds of filters to a single admin class, you will get a problem - very long generated filter form url.
In most cases you will get server response like *Error 400 Bad Request* OR *Error 414 Request-URI Too Long*. According to
`a StackOverflow discussion <http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers>`_
"safe" url length is just around 2000 characters.
You can fix this issue by adding a simple JQuery piece of code on your edit template :

.. code-block:: javascript

    $(function() {
        // Add class 'had-value-on-load' to inputs/selects with values.
        $(".sonata-filter-form input").add(".sonata-filter-form select").each(function(){
            if($(this).val()) {
                $(this).addClass('had-value-on-load');
            }
        });
        // REMOVE ALL EMPTY INPUT FROM FILTER FORM (except inputs, which has class 'had-value-on-load')
        $(".sonata-filter-form").submit(function() {
            $(".sonata-filter-form input").add(".sonata-filter-form select").each(function(){
                if(!$(this).val() && !$(this).hasClass('had-value-on-load')) {
                    $(this).remove()
                };
            });
        });
    });


                                                                                                                                                                                                                                                                                                                                         Select2
=======

The admin comes with `select2 <http://ivaynberg.github.io/select2/>`_ integration
since version 2.2.6. Select2 is a jQuery based replacement for select boxes.
It supports searching, remote data sets, and infinite scrolling of results.

The select2 is enabled on all ``select`` form elements by default.

Disable select2
---------------

If you don't want to use select2 in your admin, you can disable it in ``config.yml``.

.. configuration-block::

    .. code-block:: yaml

        sonata_admin:
            options:
                use_select2:    false # disable select2

.. note::
    If you disable select2, autocomplete form types will stop working.

Disable select2 on some form elements
-------------------------------------

To disable select2 on some ``select`` form element, set data attribute ``data-sonata-select2="false"`` to this form element.

.. code-block:: php

    ->add('category', 'sonata_type_model',
        array(
            'attr'=>array('data-sonata-select2'=>'false')
        )
    )

AllowClear
----------

Select2 parameter ``allowClear`` is handled automatically by admin. But if you want
to overload the default functionality, you can set data attribute ``data-sonata-select2-allow-clear="true"``
to enable ``allowClear`` or ``data-sonata-select2-allow-clear="false"`` to disable the ``allowClear`` parameter.

.. code-block:: php

    ->add('category', 'sonata_type_model',
        array(
            'attr'=>array('data-sonata-select2-allow-clear'=>'false')
        )
    )
