Symfony2 isClicked()始终为false

时间:2014-10-29 15:20:56

标签: php symfony

我试图在symfony2中实现提交按钮的isClicked()功能。我跟着documentation,但它对我不起作用。我总是假的。

形式:

$builder
        ->add(
            'draft',
            'submit'
        );

控制器:

$form = $this->createForm(
        new PageType(),
        $page
    );

    $form->handleRequest($request);

    if ($form->isValid()) {
        // set status draft if draft button is clicked
        if ($form->get('draft')->isClicked()) {
            $page->setStatus(Page::STATUS_DRAFT);
        }
     }

我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

好的,这是愚蠢的。我很久以前就添加了这个脚本:

$("form").submit(function () {
    $('[type=submit]', this).attr('disabled', true);
});

我用它来避免多次点击提交按钮。但是如果您的按钮被禁用,它将不会将其添加到发布请求中。这就是它失败的原因。 xurshid29解决方案对此问题没有帮助,因为当php不是请求的一部分时,php永远不知道点击了哪个按钮。

答案 1 :(得分:0)

我也遇到过这个问题,用一种不同的方式解决了这个问题:

$clickedButton = $productListForm->getClickedButton()->getName();

if ($clickedButton == 'enable') {
    $product->setStatus(Product::STATUS_ENABLED);
}

if ($clickedButton == 'delete') {
    $product->setDeleted(true);
}

编辑:

禁用的元素不会通过POST或GET方法发布。如果你想在提交中禁用双击,你可以创建一个提交按钮,用CSS隐藏它,创建另一个span或p元素,像提交按钮一样设置样式,附加一个litle javascrpt以将事件传递给实际提交按钮:

模板:

<div class="form-actions">
    <div class="disable-product">
        <input type="submit" <!-- other attributes --> class="element-hidden" />
        <p class="button-style">Disable</p>
    </div>

    <div class="remove-product">
        <input type="submit" <!-- other attributes --> class="element-hidden" />
        <p class="button-style">Remove</p>
    </div>
</div>

JS:

jQuery(document).ready(function() {
    $('.button-style').on('click', function() {
        $(this).siblings('input').mousedown();
    });
});

答案 2 :(得分:0)

这是javascript让我感到困扰。我有以下内容:

$( '#form_accept' ).click(function( e ) {
    var confirmResponse3 = confirm('{{ 'popup.accept.body'|trans( {} , 'bundle' )|escape('js')  }}');
    if( confirmResponse3 == true ) {
        $(this).parents( 'form' ).submit();
    }
    return confirmResponse3;
});

当我提交表格手册时,Symfony并不知道。但当我删除 if语句(如下所示)工作正常时。

$( '#form_accept' ).click(function( e ) {
    var confirmResponse3 = confirm('{{ 'popup.accept.body'|trans( {} , 'bundle' )|escape('js')  }}');
    return confirmResponse3;
});