ルートをajaxlyで呼び出してデータを渡します。コントローラーで$_POST['var']
、$_POST['var2']
を取得したいのですが、drupal 8でHttpFoundationを使用しているためです。 $_POST
と$_GET
は古いメソッドには存在しません。カスタムコントローラで$_POST
パラメータにアクセスするにはどうすればよいですか?
変更レコード から:
$name = $_POST['name']; // form param
なる
$name = \Drupal::request()->request->get('name'); // form param
ちなみに、GET
varsの場合は、次のように使用します。
$query = \Drupal::request()->query->get('name');
コントローラーで、型ヒント引数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
をコントローラーに注入します。
現在のリクエストにはquery
属性が含まれており、GET属性が含まれています。 request
にはPOSTパラメータが含まれています。
<?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であるとします。
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"
];
}
}
TWIGファイルで、 "my-template.html.twig"である必要があります)、このパラメーターには次のようにアクセスできます。
<h3>First Name: {{ first_name }}</h3>
そして、それは終わりました。お役に立てれば。