Сброс позиции курсора до 0 PHP Symfony 3.4 - PullRequest
0 голосов
/ 08 октября 2018

Мне удалось решить проблему с индексом «pos» благодаря этому выражению «$ request-> get ('pos')». Мне удалось восстановить правильную позицию курсора в запросе ajax, но в контроллере это всегдасброс на 0. Я не понял, откуда возникла эта проблема и как ее исправить, потому что это первый, который я использую ajax.Я не могу понять, как это работает. Спасибо за понимание!вот мой новый скрипт: это мой шаблон: new.html.twig

{% extends '::layoutv.html.twig' %}

{% block stylesheets%} {% endblock%}

{% block titre%} {%endblock%}

{% тела блока%}

<div>
    <h1>
        Insertion des projets
    </h1>
</div>
<!-- BEGIN DISPLAY THE FLASH MESSAGES -->
{% for flashMessage in app.session.flashbag.get('error') %}
    <div class="alert alert-error">
        <button class="close" data-dismiss="alert"></button>
        <strong><i class='icon-remove'></i> </strong> {{ flashMessage }}
    </div>
{% endfor %}
<!--  END DISPLAY THE FLASH MESSAGES -->

<div class="row-fluid">
    <div class="span6">


        <div class="portlet-body form">
            <!-- BEGIN FORM-->
            <form id="formProject" class="form-horizontal"
                  action="{{ path('new_project') }}" enctype="multipart/form-data" method="post" }>
                <div class="control-group">
                    <label class="control-label">Télécharger une image</label>
                    <div class="controls">
                        <input type="file" name="image">
                        </br>
                        <div class="row">
                            <div class="col-sm-8"  onClick="showWord()">
                                {{ form_row(formProject.texte|raw) }}
                            </div>
                        </div>

                    </div>
                    </br>
                </div>
                <div class="controls margin-bottom-30">
                    <button type="submit" name="submit" class="btn green">Valider</button>
                    <button type="reset" class="btn yellow">Annuler</button>
                </div>
                {{ form_rest(formProject) }}
            </form>
            <!-- END FORM-->
        </div>

    </div>
</div>

{% endblock%}

{% block javascripts%}

  <script type="text/javascript">
      function showWord() {
          cursorPos = document.getElementById("formation_minipbundle_project_texte");
          start = cursorPos.selectionStart;
          $.ajax({
              type: "POST",
              async: false,
              data:{'pos' : start},
              url: "{{ path('new_project') }}",
              success: function() {
                  console.log(start);
              }
          });

      }
  </script>

{% endblock%}

это мое действие в контроллере:

/**
 * @Route("/create", name="new_project")
 */

public function createAction(Request $request) {

    $project = new Project();
    $em = $this->getDoctrine()->getEntityManager();

    $formProject = $this->createForm('Formation\MiniPBundle\Form\ProjectType', $project);
    $formProject->handleRequest($request);
    if ($formProject->isValid()) {
   if(isset($_POST['submit'])){
            $file_name = $_FILES['image']['name'];
          //  $file_size = $_FILES['image']['size'];
            $file_tmp = $_FILES['image']['tmp_name'];
         //   $file_type = $_FILES['image']['type'];
            move_uploaded_file($file_tmp,$file_name);
            header ("Content-type: image/jpeg");
            $string=$formProject->get('texte')->getData();
            $text= filter_var($string, FILTER_SANITIZE_STRING); //Supprimer les balises.

            $font = 15;

            $width = imagefontwidth($font) * strlen($string);

            $height = imagefontheight($font) ;

            switch (strtolower(pathinfo($file_name, PATHINFO_EXTENSION))){
                case "jpg" :
                    $im = imagecreatefromjpeg($file_name);
                    break;
                case "gif" :
                    $im = imagecreatefromgif($file_name);
                    break;
                case "png" :
                    $im = imagecreatefrompng($file_name);
                    break;
                case "bmp":
                    $im = imagecreatefrombmp($file_name);
                    break;

                default :
                    trigger_error("Error Bad Extention");
                    exit();
                    break;
            }
            $position=intval($request->get('pos'));
            $y = imagesy($im) - $height;
            $textColor = imagecolorallocate ($im, 255, 255,255);
            /*----------------------------------------*/
           imagestring($im, $font, $position, $y, $text, $textColor);
            $project->setLogo($file_name);
            $em->persist($project);
            $em->flush();
            imagejpeg($im);
        }
    }
    return $this->render('FormationMiniPBundle:Project:new.html.twig', array(
                'project' => $project,
                'request'=> $request->request->get('pos'),
                'formProject' => $formProject->createView(),
    ));
}

1 Ответ

0 голосов
/ 08 октября 2018

Поскольку вы не сообщили нам, какой PHP Framework вы используете, в обычном PHP вы должны иметь данные POST для переменных

$ _ POST ['pos'] или $ _REQUEST ['pos']

Но в вашем коде Javascript вы печатаете начало успешной работы ajax, то есть после того, как значение отправлено на сервер и возвращено ... так что, поскольку существует значительная задержка, это означает, чтопеременная start может быть нулевой перед ajax.

Попробуйте использовать console.log (start) сразу после этой строки:

start = cursorPos.selectionStart;console.log (start);

И до того, как будет создан ajax, потому что, если в этой точке установлено значение null, вы получите null на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...