从PHP Symfony2动态内容引导模态对话框

Dynamically content bootstrap modal dialog from PHP Symfony2

本文关键字:模态 对话框 PHP Symfony2 动态      更新时间:2023-09-26

我正在与bootbox一起使用symfony 2渲染表单。所以我有一个问题当我想动态地改变内容时我不知道怎么做

这就是我想要的

  1. 我点击一个按钮,从嵌入在模态对话框中的控制器渲染表单
     <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。当我渲染一个表单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,我希望发送内容到模态对话框,而不隐藏模态对话框和修改内容。

我该怎么做?

谢谢。

你可以这样做:

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', function(){
    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);
                }      
            });
          }
      }
    });
});