$ _POST 및 $ _GET 매개 변수를 얻는 방법 호출하고 내 컨트롤러, 내가 싶어,

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



답변

로부터 변경 기록 :

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

된다

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

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

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

답변

컨트롤러에서 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


답변

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');
  }

}

답변

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

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

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


답변

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

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

답변

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

$request->getContent();

답변

다음은 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>

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