내가 ajaxly 경로를 호출하고 내 컨트롤러, 내가 싶어, 그것은 데이터를 전달 $_POST['var']
, $_POST['var2']
그것은 때문에 드루팔 8 HttpFoundation를 사용하는 것, $_POST
그리고 $_GET
내가 액세스 할 수있는 방법, 기존 방법에 존재하지 않는 $_POST
사용자 정의 컨트롤러에서 매개 변수를?
답변
로부터 변경 기록 :
$name = $_POST['name']; // form param
된다
$name = \Drupal::request()->request->get('name'); // form param
또한 GET
var의 경우 다음을 사용합니다.
$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
컨트롤러에를 주입하십시오 .
현재 요청에는 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이라고 가정합니다.
- .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>
그리고 그 일이 끝났습니다. 도움이 되었기를 바랍니다.