PHP Symfony2中的动态内容引导模式对话框

时间:2014-07-05 19:33:35

标签: javascript php twitter-bootstrap symfony bootbox

我正在与bootbox一起使用symfony 2来呈现表单。因此,当我想动态更改内容时,我会遇到一个麻烦,我不知道如何。

所以这就是我想要

  1. 我点击一个按钮,该按钮从嵌入模态对话框
  2. 内的控制器渲染一个Form
         <button class="btn btn-primary btn-new" data-toggle="modal" data-target="#agregarRonda">
              Add My Entity
            </button>
    
            <div  style="display: none;"  class="modal fade" id="agregarRonda" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"  aria-hidden="true">
               <div class="modal-dialog">
                 <div class="modal-content">
                      <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                        <h4 class="modal-title" id="myModalLabel">Add my Entity</h4>
                      </div>
                      <div class="modal-body">
                            {% embed "projete:MyEntity:newMyEntity.html.twig"  %}
                            {% endembed %}
    
                      </div>
                </div>
              </div>
            </div>
    

    2.当我渲染一个Form newMyentity.html.twig时,它有一个按钮,可以在symfony上的控制器内重定向到这个方法,如:

    public function createMyEntityAction(Request $request)
    {
        $user = $this->get('security.context')->getToken()->getUser();
        $entity = new MyEntity();
        $form = $this->createMyEntityForm($entity);
        $form->handleRequest($request);
        if ($form->isValid()) 
        {
             if( ifNotExist( $entity->getDescription() )   )
             {
                //Do the right things
             }
             else{
               /*
                * Return content to the modal dialog and don't hide modal dialog? 
                */ 
             }
        }
    }
    

    所以,我调用一个方法ifNotExist来检查一些事情。如果返回false我希望将内容发送到模态对话框而不隐藏模态对话框并修改内容。

    我该怎么做?

    感谢。

1 个答案:

答案 0 :(得分:1)

你可以这样做。

public function createMyEntityAction(Request $request)
{
    $user = $this->get('security.context')->getToken()->getUser();
    $entity = new MyEntity();
    $form = $this->createMyEntityForm($entity);
    if ($request->getMethod()=="POST"){
        $form->handleRequest($request);
        if ($form->isValid()) 
        {
            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $em->flush();

            return new Response($entity->getId(),201); 
        }
    }

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

您的实体:

use Symfony\Component\Validator\Constraints as Assert;
...
/**
 * MyEntity
 * @ORM\Entity()
 * @ORM\Table()
 */
class MyEntity
{
    ...
    /**
     * 
     * @Assert\NotBlank(message ="Plz enter the description")
     */
    private $description;
    ...
}

你的JS:

$('#yourAddBtnId').on('click', fcuntion(){
    var $modal = $('#yourModalId')
    $.get("yourURL", null, function(data) {
      $modal.find('modal-body').html(data);
    })
    // create the modal and bind the button
    $('#yourModalId').dialog({
      buttons: {
        success: {
          label: "Save",
          className: "btn-success",
          callback: function() {
            that = this;
            var data = {};
            // get the data from your form
            $(that).find('input, textarea').each(function(){
              data[$(this).attr('name')] = $(this).val();
            })
            // Post the data
            $.post( "yourURL", function(data , status) {
                if ( "201" === status){
                  $modal.modal('hide');
                }
                else {
                  $modal.find('modal-body').html(data);
                }      
            });
          }
      }
    });
});