$ _POST 및 $ _GET 매개 변수를 얻는 방법


26

내가 ajaxly 경로를 호출하고 내 컨트롤러, 내가 싶어, 그것은 데이터를 전달 $_POST['var'], $_POST['var2']그것은 때문에 드루팔 8 HttpFoundation를 사용하는 것, $_POST그리고 $_GET내가 액세스 할 수있는 방법, 기존 방법에 존재하지 않는 $_POST사용자 정의 컨트롤러에서 매개 변수를?


2
$ _POST는 여전히 존재하지만 직접 사용하지 않아야합니다. $ _POST가 비어 있으면 요청 객체도 비어 있고 오류가 더 일찍 발생합니다. 예를 들어, mod_rewrite가 올바르게 활성화 / 구성되어 있지 않고 페이지를 찾을 수 없음 지시문을 통해 리디렉션하여 게시물 데이터를 삭제하기 때문입니다.
Berdir

답변:


62

로부터 변경 기록 :

$name = $_POST['name']; // form param

된다

$name = \Drupal::request()->request->get('name'); // form param

또한 GETvar의 경우 다음을 사용합니다.

$query = \Drupal::request()->query->get('name');

1
감사합니다. 어떻게하면 모든 항목을 얻을 수 있습니까? 나는 $ _POST가 하나의 아이템이 아니라는 것을 의미합니다.
유세프

3
확인하지는 않았지만 Symfony를 알고 있다고 가정합니다.\Drupal::request()->request->all()
Clive

2
고마워, 이것은 내가 예상 한 결과를 얻지 못했지만 내 질문에 대한 진정한 대답입니다 (아마 다른 장소에 문제가있을 수 있습니다. 다른 질문에 묻습니다)
Yusef

1
\ Drupal :: request ()-> query-> all ()을 사용하여 모든 $ _GET 변수를 얻을 수 있음을 확인할 수 있습니다.
oknate

29

컨트롤러에서 type-hinted 인수로 요청을 가져옵니다 Request $request.

<?php

namespace Drupal\mymodule\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Request;

class ExampleController extends ControllerBase {

  /**
   * Controller to return a POST or a GET parameter.
   */
  public function action(Request $request) {

    // get your POST parameter
    $foo = $request->request->get('foo');

    // or get your GET parameter
    $foo = $request->query->get('foo');

    return ['#markup' => $foo];
  }

}

추가 정보 https://www.drupal.org/docs/8/api/routing-system/using-parameters-in-routes


11

RequestStack컨트롤러에를 주입하십시오 .

현재 요청에는 queryGET 매개 변수를 포함하는 속성이 포함됩니다. requestPOST 매개 변수를 포함합니다.

<?php

namespace Drupal\example_module\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * An example controller.
 */
class ExampleController extends ControllerBase {

  /**
   * @var Symfony\Component\HttpFoundation\RequestStack
   */
  private $requestStack;

  /**
   * Constructor.
   *
   * @param Symfony\Component\HttpFoundation\RequestStack $request_stack
   */
  public function __construct(RequestStack $request_stack) {
    $this->requestStack = $request_stack;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('request_stack')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function action() {
    // Get your GET parameter here.
    $this->requestStack->getCurrentRequest()->query->get('foo');
  }

}

4

Request 객체를 다음과 같이 확인할 수 있습니다

\Drupal::request()->getMethod();

GET 또는 POST 또는 무엇이든 반환합니다. 객체 내부에서 작업하는 경우 요청 서비스를 DI에 저장하십시오.


3

사용하는 경우 다음을 사용 Content-Type: application/json하십시오.

$post_data = json_decode( $this->request->getContent(),TRUE);

2

다른 답변 중 어느 것도 나를 위해 일하지는 않았지만 나는 이것을 발견했습니다.

$request->getContent();

0

다음은 URL 매개 변수에 액세스하여 TWIG 템플릿으로 전달하는 예입니다. 모듈과 필수 파일을 이미 작성했으며 "/ test? fn = admin"이 URL이라고 가정합니다.

  1. .module 파일에서 hook_theme을 구현하고 변수 및 템플리트 이름을 정의하십시오 (템플릿 파일을 작성할 때 "_"를 "-"로 바꾸십시오)
function my_module_theme () {   
     return [
      'your_template_name' => [               
         'variables' => [
             'first_name'    => NULL,
          ],   
     ]; 
   }

이제 컨트롤러를 만들고 아래 코드를 넣으십시오.

 namespace Drupal\my_module\Controller;

 use Drupal\Core\Controller\ControllerBase;
 use Symfony\Component\HttpFoundation\Request;


 class MyModule extends ControllerBase {

   public function content(Request $request) {

     return [
       '#theme' => 'my_template',
       '#first_name' => $request->query->get('fn'), //This is because the parameters are in $_GET, if you are accessing from $_POST then use "request" instead "query"
     ];
   }

 }

이제 "my-template.html.twig"인 TWIG 파일에서이 매개 변수에 다음과 같이 액세스 할 수 있습니다.

 <h3>First Name: {{ first_name }}</h3>

그리고 그 일이 끝났습니다. 도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.