Sonata admin根据所选值动态更改输入数据-自定义控制器

问题描述 投票:0回答:1

我正在尝试将动态输入实现为奏鸣曲形式。当用户选择类别时,我想更改其他值列表。

所以我创建了一个新的控制器,配置了一个新的路由,并创建了一个新的树枝模型。

现在,我有这个:

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属性,我有一个错误:

没有为控制器_sonata_admin和当前路径AppBundle\Controller\TransitMouvController定义transit_list

我可能很想念Sonata管理员。。

感谢任何帮助。

我正在尝试将动态输入实现为奏鸣曲形式。当用户选择类别时,我想更改其他值列表。所以我创建了一个新的Controller,配置了一个新的路由,然后... ...>

php ajax symfony sonata-admin
1个回答
0
投票

我还试图在我的管理类中添加configureRoute函数(而不是在routing.yml文件中配置路由):

    protected function configureRoutes(RouteCollection $collection)
    {
        parent::configureRoutes($collection);
        $collection->add('transit_list',  'transitList');
    }
© www.soinside.com 2019 - 2024. All rights reserved.