Администратор Sonata динамически изменяет входные данные в зависимости от выбранного значения - пользовательский контроллер - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь внедрить динамические входы в форму сонаты. Когда пользователь выбирает категорию, я хотел бы изменить другой список значений.

Итак, я создал новый контроллер, настроил новый маршрут и создал новую модель ветки.

Сейчас у меня есть это:

class MyController extends CRUDController
{
    public function listAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $transitRepository = $em->getRepository("AppBundle:Transit");

        $transits = $transitRepository->findTransitWithType($request->query->get("type"));
        return $this->render("transits.html.twig", array("transits" => $transits));       
    }

Моя веточкамодель:

{% extends '@SonataAdmin/standard_layout.html.twig' %}
{% block itineraire_widget %}


<div class="form-group">
    {{ form_start(form, { 'id': id } ) }}
        {{ form_errors(form) }}    

              {{ form_label (form.type, "Type") }}
              {{ form_widget(form.type, {'attr' : {'class' : 'typeclass-' ~ id ~ ' span3'}}) }}
              {{ form_errors(form.type) }}

              {{ form_label (form.transit, "Transit") }}
              {{ form_widget(form.transit, {'attr' : {'class' : 'transitclass-' ~ id ~ ' span3'}}) }}
              {{ form_errors(form.transit) }}


        {{ form_end(form) }} 
</div>

    {% block javascripts %}

    <script>

    $(document).ready(function () {
        $(".typeclass-{{id}}").change(function () {
            $.ajax({
                url: "{{ path('transit_list') }}",
                data: {
                    'type': $(this).val()
                },
                method: 'GET',
                success: function (html) {
                    var transitSelector = $(".transitclass-{{id}}");
                    transitSelector.empty();

                    transitSelector.append(html);
                 },
                error: function (data) {
                     console.log("An error ocurred while loading data ...");
                }
            });
        });
    });
        </script>

    {% endblock %}

{% endblock %}

Я добавил службу в файл service.yml:

    app.admin.transit.mouv:
        class: AppBundle\Admin\Transit_mouvAdmin
        arguments: 
            - ~
            - AppBundle\Entity\Transit_mouv
            - AppBundle\Controller\MyController
        tags:
            - { name: sonata.admin, manager_type: orm, group: admin, label: Transit_mouv }

А затем добавил маршрут к route.yml:

transit_list:
    resource: 
    path:     /get-transits-from-type
    defaults: { _controller: "AppBundle:TransitMouv:listTransitByType" }
    methods:  GET

Но у меня проблема с Sonata, когда я хочу загрузить список, в зависимости от атрибута type у меня появляется ошибка:

Для контроллера AppBundle\Controller\TransitMouvController не определено *1021* и текущий маршрут transit_list

Возможно, мне что-то не хватает с администратором Sonata ..

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 22 октября 2019

Я также попытался добавить функцию configureRoute в свой класс администратора (вместо настройки маршрута в файле routing.yml):

    protected function configureRoutes(RouteCollection $collection)
    {
        parent::configureRoutes($collection);
        $collection->add('transit_list',  'transitList');
    }

Затем в моей модели веток я попытался:

            $.ajax({
                url: "{{ admin.generateUrl('transitList') }}",
                data: {
                    'type': $(this).val()
                },
                method: 'GET',
                success: function (html) {
                    //code
                 },
                error: function (data) {
                     console.log("An error ocurred while loading data ...");
                }
            });

В этом случае у меня появляется эта ошибка:

Переменная «admin» не существует.

Я следую этому сообщению: stackoverflow.com / вопросы / 3458763

...