私はajaxlyルートを呼び出し、それにデータを渡し、私のコントローラでは、私が取得したい$_POST['var']
、$_POST['var2']
それが理由のDrupal 8にHttpFoundationを使用してのようだ、$_POST
と$_GET
私はアクセスすることができますどのように、古い方法に存在していない$_POST
カスタムコントローラでパラメータを?
私は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
変数には次のものを使用します。
$query = \Drupal::request()->query->get('name');
\Drupal::request()->request->all()
コントローラでは、タイプヒント引数を使用してリクエストを取得します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');
}
}
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"
];
}
}
「my-template.html.twig」であるTWIGファイルで、このパラメーターにアクセスできます。
<h3>First Name: {{ first_name }}</h3>
そしてそれは終わった。お役に立てれば。