Здравствуйте, мне нужен контроллер, который бы принимал POST параметры, и в ответ возвращал JSON данные.
Вот как я сделал, но не работает, не получает POST параметры.
routing.yml:
path: '/api/json'
defaults:
_controller: 'Drupal\modulemy\Controller\JsonApiController::renderApi'
_title: 'JSON api'
requirements:
_access: 'TRUE'
JsonApiController.php:
<?php
namespace Drupal\modulemy\Controller;
use
Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
/**
* Implementing our example JSON api.
*/
class JsonApiController extends ControllerBase {
/**
* Callback for the API.
*/
public function renderApi(Request $request) {
$value = !empty($request->request->get('your_posted_variable')) ? $request->request->get('your_posted_variable') : '2';
return new JsonResponse([
'data' => $value,
'method' => 'POST',
]);
}
}
?>
Он постоянно мне возвращает '2'.
Комментарии
Так он и будет постоянно возвращать 2
Ибо я уверен, что вы не совсем осознаете что такое POST-запрос.
В phpStorm есть встроенный инструмент. Либо любым любым другим способом отправте именно POST запрос. А еще можно проверить на существование методом has()
Попробуйте явно указать/ограничить метод обращения к контроллеру:
path: '/api/json'
defaults:
_controller: 'Drupal\modulemy\Controller\JsonApiController::renderApi'
_title: 'JSON api'
methods: 'POST'
requirements:
_access: 'TRUE'
https://www.drupal.org/docs/drupal-apis/routing-system/structure-of-routes
UPD. Вообще - неплохо бы привести ещё и исходный HTML-код формы. Судя по всему, Drupal Form API не используется.
UPD 2. К слову, кроме использования type-hinted аргумента
Request $request
можно использовать конструкцию вида:<?php
$value = \Drupal::request()->request->get('your_posted_variable');
?>