programing

PHP Symfony 4에서 POST 글로벌 변수를 가져오는 방법은 무엇입니까?

lovejava 2023. 8. 17. 20:32

PHP Symfony 4에서 POST 글로벌 변수를 가져오는 방법은 무엇입니까?

Symfony 4의 POST 글로벌 변수 결과를 얻는 데 매우 이상한 문제가 있습니다.

저는 다음과 같이 시도했습니다.

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

캘린더 입력 날짜가 변경되었을 때 실제로 AJAX 요청을 보내는 방법은 다음과 같습니다.

onSelect: function(date, instance) {
    $.ajax({
      url : 'home',
      type : 'POST',
      data : {'date':date},
      dataType : 'html',
      success : function(code_html, statut){
        console.log(statut);
      },

      error : function(resultat, statut, erreur){
      
      },

      complete : function(resultat, statut){

      }          
    });

onSelect 콜백이 원하는 날짜 값을 성공적으로 수신합니다.

그리고 이 결과는 날짜 변수에 대한 올바른 값을 가진 200개의 성공 코드를 보여줍니다.

profiler screenshot

그렇지만$date이라null.

당신의 코드에서 헤더나 그와 유사한 것에는 문제가 없으며, jQuery 요청은 그대로 맞습니다(당신의 코드를 테스트했습니다).

질문에 없는 PHP 코드에 문제가 있을 수 있습니다.

물체를 올바르게 주입하는 경우 쉽게get()포스트 변수를 검색합니다.

예:

namespace App\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class VeryDefaultController extends AbstractController
{

   /**
   * @Route("/very/default", name="very_default")
   * @param Request $request
   *
   * @return \Symfony\Component\HttpFoundation\Response
   */
   public function index(Request $request)
   { 
       $date = $request->get('date');
   }
}

당신의 예에서 당신은 하고 있습니다.$request->request->get('date') 또는 요청에는 괜찮지만, 당신이 주입하지 않기 때문에 아마도 실패할 것입니다.Request정확하게 반대합니다.

의 코드는 당신의 jQuery AJAX POST 요청으로 테스트되었으며 작동합니다.그 부분은 본질적으로 잘못된 것이 없습니다.그리고 다음을 사용하여 POST 변수에 액세스할 수 있습니다.get().

JSON 문자열을 보내고 있으므로 다음을 사용해야 합니다.

$content = $request->getContent();

그리고 나서 당신은 그것을 해석해야 할 것입니다.json_decode.

가능한 해결책은 다음과 같습니다.

$post_data = json_decode($request->getContent(), true);
$date = $post_data['date'];

당신이 직면할 수 있는 문제는 PHP가 변수를 포스트바디에서 로 변환하기 위해 사용하는 Accept HTML 헤더와 관련이 있습니다.$_POST및 Symfony 사용$_POST요청 개체 데이터를 채웁니다.

이 동작을 가져오려면 헤더를 사용해야 합니다.application/x-www-form-urlencoded또는multipart/form-data.

코드를 사용해야 하는 경우를 확인하려면 다음과 같이 하십시오.

dump($request->getContent());

변수로 가득 찬 경우 PHP가 변수를 다음으로 변환하지 않음을 의미합니다.$_POSTMIME 불일치로 인해, 그렇지 않으면 요청이 올바르지 않음을 의미합니다.

포스트 변수에 액세스하는 일반적인 방법은 다음과 같습니다.

public function index(Request $request) 
{
    dump($request->getContent()); // get raw body of http request 
    dump($request->request->get('date')); //get converted variable date by php and then by symfony
}

확인할 수 있는 유용한 링크:

컨텐츠 유형을 추가하고 json 데이터를 문자열화하고 다음과 같은 기존 직렬화를 사용해 보십시오.

onSelect: function(date, instance) {
var data = {'date':date};
$.ajax({
  url : 'home',
  type : 'POST',
  data : JSON.stringify(data),
  contentType: "application/json; charset=utf-8",
  traditional: true,
  dataType : 'html',
  success : function(code_html, statut){
    console.log(statut);
  },

  error : function(resultat, statut, erreur){

  },

  complete : function(resultat, statut){

  }          
});

컨트롤러 코드를 게시하지 않으므로 다음 사항을 확인하는 것이 좋습니다.

  • 다음과 같은 사용 설명서가 있습니다.\Symfony\Component\HttpFoundation\Request;
  • 요청을 다음과 같이 주입하고 있습니다.public function post( Request $request )
  • 를 다과같데를읽있습다니고터이이음과 같이 .$data = json_decode( $request->getContent(), true);이 예에서는 데이터를 연결 배열로 사용합니다.

언급URL : https://stackoverflow.com/questions/54889646/how-to-get-post-global-variable-in-php-symfony-4