Symfony复选框与行动

时间:2017-01-17 08:56:53

标签: javascript php jquery symfony

我使用symfony并拥有带有一些实体数组的数组的模板,并且需要在for in复选框中为所有实体创建,并且在检查了一些实体并单击ready时转到带有ID的操作(来自所有复选框) - 示例 - taskExecution.id

我没有使用带有类型实体的symfony表单,因为taskExecutions复杂的DTO,从这个DTO我只需要id来发送另一个动作

    $taskExecutions = $this->getTaskExecution()
            ->getTaskExecutionByFilter($form->getData());

    return [
        'form' => $form->createView(),
        'taskExecutions' => $taskExecutions
    ];

    {% for taskExecution in taskExecutions %}
        <input class="searchType" type="checkbox" name="SharingNotification" id={{ taskExecution.id }}>
           <label class="searchtype2label">{{ taskExecution.id }}</label>
        </input>
    {% endfor %}

    {% javascripts
'@EconomyBundle/Resources/public/js/check-task-executions.js'
filter='?yui_js' combine=true %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}

添加js

$('.searchType').click(function() {
alert($(this).attr('id'));
if(this.checked){
    $.ajax({
        type: "POST",
        url: '/manage/outbound_invoices/task_executions/ids',
        data: $(this).attr('id'), //--> send id of checked checkbox on other page
        success: function(data) {
            alert('it worked');
            alert(data);
            $('#container').html(data);
        },
        error: function() {
            alert('it broke');
        },
        complete: function() {
            alert('it completed');
        }
    });

}
});

这是我的行动

    /**
 * give task executions ids for created row.
 *
 * @Route("/manage/outbound_invoices/task_executions/ids", name="ids_task_executions_")
 * @Method({"POST", "GET"})
 */
public function getIdsTaskExecutionsAction(Request $request)
{
    $ids = $request->get('ids');
}

我不知道js,请帮忙了解如何获取复选框值(1或0)和实体ID参数并发送到另一个动作

1 个答案:

答案 0 :(得分:1)

我认为你不需要javascript。相反,您应该查看how to use a form without data_class

上的Symfony文档

您的表单如下:

<?php

class TaskExecutionType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('taskExecution', EntityType::class, array(
                'class' => 'AppBundle/TaskExecution',
                'expanded' => true,
                'multiple' => true
            ))
            ->add('submit', SubmitType::class)
        ;
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'csrf_protection' => false
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'execution_task_type';
    }
}

在你的控制器中:

<?php

/**
 * give task executions ids for created row.
 *
 * @Route("/manage/outbound_invoices/task_executions/ids", name="ids_task_executions_")
 * @Method({"POST", "GET"})
 */
public function getIdsTaskExecutionsAction(Request $request)
{
    $form = $this->createForm(TaskExecutionType::class, null, array(
        'method' => 'POST',
        'action' => 'ids_task_executions'
    ));

    $form->handleRequest($request);

    if ($form->isValid()) {
        $data = $form->getData(); //this will be an array of all the TaskExecution entities you selected

        //your own logic
    }

    return $this->render('template.html.twig', array(
        'form' => $form->createView()
    ));
}