GVKun编程网logo

JS文件中的数组未发送到symfony控制器(js数组push不进去)

23

如果您对JS文件中的数组未发送到symfony控制器和js数组push不进去感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解JS文件中的数组未发送到symfony控制器的各种细节,并对js数组p

如果您对JS文件中的数组未发送到symfony控制器js数组push不进去感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解JS文件中的数组未发送到symfony控制器的各种细节,并对js数组push不进去进行深入的分析,此外还有关于Ajax 调用 Symfony 控制器、javascript – 外部js文件中的Symfony 2翻译、php – symfony 3控制器中的自定义注释、php – Symfony中的URL自动添加了params?Symfony =的实用技巧。

本文目录一览:

JS文件中的数组未发送到symfony控制器(js数组push不进去)

JS文件中的数组未发送到symfony控制器(js数组push不进去)

Two files的名称相同,但类型不同。从jquery创建的The first one具有数组,但是从<form action="{{ path('save_changes') }}" method="POST" id="formTableChange">创建的the second one没有该数组。重定向后,带有数组的文件消失了,仅保留了由重定向创建的the one

树枝

`{%扩展了'main / base.html.twig'%} {%block body%}

<div>
    <div>
        <div>
            <h1>
                {{ thisUser_group }}
            </h1>
        </div>
    </div>
</div>

<div>
    <div>
            <div id="app">

            <form action="{{ path('save_changes') }}" method="POST" id="formTableChange">
            <table id="Table">
                 <th id="TableNAME" rowspan="2"> NAME</th>
                 <th id="TableMonth" colspan="{{ daysInMonth }}"><a href=""><</a>{{ monthList[monthNow-1] }}<a href="">></a>
                  <tr>

                 {% for i in range(1,daysInMonth) %}
                 <th>{{ i }}</th>
                 {% endfor %}
                                      </tr>
                                             </th>
                 {% for user_group in users_group %}

                   <tr>
                         <td id="TableName_{{ user_group.id }}">
                        {{ user_group.username }}
                        </td>
                         {% for i in range(1,daysInMonth) %}
                         <td contentEditable="true" id="{{ yearAndMonthNow }}-{{ i }}_{{ user_group.id }}"> </td>
                         {% endfor %}
                    </tr>
                {% endfor %}
                </table>
                <button id="saveTableChange">Save</button>
            </form>
    </div>
</div>

{%endblock%} {%block addjs%} {%endblock%}`

,

很难不看到html就知道它,但是看起来您的按钮在form内,并且单击正在提交它,因为这是按钮的默认行为。为防止这种情况,只需使用.preventDefault()禁用默认功能即可。

$("#saveTableChange").click(function(e){
    e.preventDefault();
    var arrayMiss = [];
    // Rest of the code
});

Ajax 调用 Symfony 控制器

Ajax 调用 Symfony 控制器

如何解决Ajax 调用 Symfony 控制器?

我正在尝试使用 ajax 调用一个方法。 ajax连接成功,没有出现错误提示。

JS 代码

$("[id^=changeStatus]").each(function(){
$(this).on("click",function(){
  const id = $(this).data(''id'');
  console.log(id);
  $.ajax({
          type: "POST",url: "{{url(''change_order_status'')}}",data: id,async: false,})
  .done(function() {
    console.log(''success'');
  })
  .fail(function () {
    console.log(''error'');
  });
});

但是控制器中的方法似乎不起作用。 控制器

/**
 * @Method("POST")
 * @Route("/%eccube_admin_route%/",name="change_order_status")
 * @param $request
 * @return \Symfony\Component\HttpFoundation\JsonResponse
 */
public function changeOrderStatus(Request $request)
{
    if (!$request->isXmlHttpRequest()) {
        throw new BadRequestHttpException();
    }
    
    $this->logger->info("it''s working");
    dump($rquest);

}

我不知道它有什么问题。 请帮忙。

我将 js 作为片段插入到每个页面中,这就是它无法正常工作的原因。

enter image description here

enter image description here

解决方法

您必须在控制器中返回 Response 类的实例。所以在这里,你可以做的是返回一个 JsonResponse

return new JsonResponse($request->getContent());
,

也许你可以试试这个。

$("[id^=changeStatus]").each(function(){
$(this).on("click",function(){
  const id = $(this).data(''id'');
  console.log(id);
  $.ajax({
          type: "POST",url: "{{ path(''change_order_status'') }}",data: {
             id : id
          },async: false,})
  .done(function(data) {
    console.log(data)
    console.log(''success'');
  })
  .fail(function () {
    console.log(''error'');
  });
});
/**
 * @Route("/%eccube_admin_route%/",name="change_order_status",methods={"POST"})
 * @param $request
 * @return \Symfony\Component\HttpFoundation\JsonResponse
 */
public function changeOrderStatus(Request $request)
{
    if (!$request->isXmlHttpRequest()) {
        throw new BadRequestHttpException();
    }
    
    $this->logger->info("it''s working");

    $id = $request->request->get(''id'');

    // Try to dump your request
    // dd($request);
    
    return $this->json([
        ''success'' => true
    ]);
}

我只是不知道 eccube_admin_route 是什么意思。 并且不要忘记在您的控制器类中扩展 AbstractController

Try to dump your controller object and use symfony debugbar to open your ajax request,click on url columns

这是我项目中的示例。尝试转储您的控制器对象并使用 symfony 调试栏打开您的 ajax 请求,点击 url 列

javascript – 外部js文件中的Symfony 2翻译

javascript – 外部js文件中的Symfony 2翻译

我想将一些翻译放到外部Java Script文件中的函数中.可以解析js文件,例如像Twig模板?

解决方法:

我可以推荐BazingaJsTranslationBundle(@smoreno建议使用的捆绑包,但同时更改了名称).

如果您不想使用Bundle,那么有一个简单易用的解决方法:您可以在HTML twig文件中定义已翻译的字符串,并在外部JavaScript文件中调用它.比如这样

HTML文件

{# index.html.twig #}
<html>
    <head></head>
    <body>
        {# Your stuff #}
        <script type="text/javascript">
            var myTranslatedString = '{{ 'my_string'|trans }}';
        </script>
    </body>
</html>

翻译文件

# messages.en.yml
my_string: 'My Content'

JavaScript文件

// script.js
alert(myTranslatedString); // Will output 'My Content'

php – symfony 3控制器中的自定义注释

php – symfony 3控制器中的自定义注释

所以问题非常简单.我的控制器中的代码已经变得冗余,我决定为它做一个注释.
if (!$request->getContentType() === 'json' ) {
        return new JsonResponse(array('success' => false));
    }
    $content = $request->getContent();

    if(empty($content)){
        throw new BadRequestHttpException("Content is empty");
    }
    $data = json_decode($content,true);
    if(empty($data) || !array_key_exists('type',$data)) {
        return new JsonResponse(array('success' => false));
    }

如何制作自定义注释@CheckRequest,我可以使用$request对象作为参数?

您需要创建一个自定义注释,然后是一个注入注释阅读器并处理kernel.controller事件的侦听器:

注解

/**
 * @Annotation
 */
class CheckRequest
{
}

服务定义

services:
    controller_check_request:
        class: AppBundle\EventListener\ControllerCheckRequestListener
        tags:
            - { name: kernel.event_listener,event: kernel.controller,method: onKernelController}
        arguments:
            - "@annotation_reader"

监听器:

namespace AppBundle\EventListener;

use AppBundle\Annotation\CheckRequest;
use Doctrine\Common\Annotations\Reader;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;

class ControllerCheckRequestListener
{
    /** @var Reader */
    private $reader;

    /**
     * @param Reader $reader
     */
    public function __construct(Reader $reader)
    {
        $this->reader = $reader;
    }

    /**
     * {@inheritdoc}
     */
    public function onKernelController(FilterControllerEvent $event)
    {
        if (!is_array($controllers = $event->getController())) {
            return;
        }

        $request = $event->getRequest();
        $content = $request->getContent();

        list($controller,$methodName) = $controllers;

        $reflectionClass = new \ReflectionClass($controller);
        $classAnnotation = $this->reader
            ->getClassAnnotation($reflectionClass,CheckRequest::class);

        $reflectionObject = new \ReflectionObject($controller);
        $reflectionMethod = $reflectionObject->getmethod($methodName);
        $methodAnnotation = $this->reader
            ->getmethodAnnotation($reflectionMethod,CheckRequest::class);

        if (!($classAnnotation || $methodAnnotation)) {
            return;
        }

        if ($request->getContentType() !== 'json' ) {
            return $event->setController(
                function() {
                    return new JsonResponse(['success' => false]);
                }
            );
        }

        if (empty($content)) {
            throw new BadRequestHttpException('Content is empty');
        }

        $data = json_decode($content,true);

        if ($request->getContentType() !== 'json' ) {
            return $event->setController(
                function() {
                    return new JsonResponse(['success' => false]);
                }
            );
        }
    }
}

请注意,不是返回响应,而是使用$event-> setController();设置整个控制器,并且在进行该调用时也必须返回.

然后在您的控制器中,您可以在整个类中设置它:

use AppBundle\Annotation\CheckRequest;

/**
 * @CheckRequest
 */
class YourController extends Controller
{
}

或个别方法/行动:

use AppBundle\Annotation\CheckRequest;

class TestController extends Controller
{
    /**
     * @Route("/",name="index")
     * @CheckRequest
     */
    public function indexAction(Request $request)
    {
        // ...
    }
}

php – Symfony中的URL自动添加了params?Symfony =

php – Symfony中的URL自动添加了params?Symfony =

我的网址有问题. Symfony会自动添加params?Symfony =
怎么删除?

我认为这是一个改变的服务器设置.

http://mysite.com/?symfony=123456789

Symfony:Symfony 1.4

解决方法:

它看起来像会话ID.

将session.use_only_cookies设置为1仅使用cookie在客户端存储会话ID.

今天关于JS文件中的数组未发送到symfony控制器js数组push不进去的讲解已经结束,谢谢您的阅读,如果想了解更多关于Ajax 调用 Symfony 控制器、javascript – 外部js文件中的Symfony 2翻译、php – symfony 3控制器中的自定义注释、php – Symfony中的URL自动添加了params?Symfony =的相关知识,请在本站搜索。

本文标签: