$ _POSTおよび$ _GETパラメーターを取得する方法


22

私はajaxlyルートを呼び出し、それにデータを渡し、私のコントローラでは、私が取得したい$_POST['var']$_POST['var2']それが理由のDrupal 8にHttpFoundationを使用してのようだ、$_POST$_GET私はアクセスすることができますどのように、古い方法に存在していない$_POSTカスタムコントローラでパラメータを?


2
$ _POSTはまだ存在します。直接使用しないでください。$ _POSTが空の場合、リクエストオブジェクトも空になり、エラーが早く発生します。多くの場合、これは、たとえばmod_rewriteが正しく有効化/構成されておらず、ページがnot foundディレクティブを介してリダイレクトされ、ポストデータがドロップされるためです。
ベルディール

回答:


58

変更記録から:

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

になる

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

ちなみに、GET変数には次のものを使用します。

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

1
おかげで、すべてのアイテムを入手する方法を知っていますか?つまり、$ _ POSTは完全に1つのアイテムではありません。
ユセフ

3
私はチェックしていませんが、Symfonyを知っていると思います:\Drupal::request()->request->all()
Clive

2
おかげで、これは私の質問に対する本当の答えです。期待した結果は得られませんでした(別の場所に問題があるかもしれません。別の質問でそれを尋ねます。
Yusef16年

1
\ Drupal :: request()-> query-> all()を使用してすべての$ _GET変数を取得できることを確認できます。
oknate

27

コントローラでは、タイプヒント引数を使用してリクエストを取得します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コントローラーに注入します。

現在のリクエストにqueryは、GETパラメータを含む属性が含まれています。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

次のようにリクエストオブジェクトを確認できます

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

GETまたはPOSTなどを返します。オブジェクト内で作業している場合は、Requestサービスを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.