Здравствуйте, не могу понять как лучше сделать.
Я создал routing.yml:
modulemy.json_api:
path: '/api/json'
defaults:
_controller: 'Drupal\modulemy\Controller\JsonApiController::renderApi'
_title: 'JSON api'
methods: [POST]
requirements:
_access: 'TRUE'
path: '/api/json'
defaults:
_controller: 'Drupal\modulemy\Controller\JsonApiController::renderApi'
_title: 'JSON api'
methods: [POST]
requirements:
_access: 'TRUE'
и controller 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) {
$post = $request->request;
switch (
$post->get('action')) {
case 'getInfo':
$data = $this->actiongetInfo($post->get('id'));
break;
default:
$data = 'Данный action не найден!';
break;
}
return new
JsonResponse([
'data' => $data,
'method' => 'POST',
]);
}
public function
actiongetInfo($id='')
{
return [
'id' = $id,
'title' = 'Title'
];
}
}
?>
В данном случае я использую "switch" и POST параметр "action", чтобы понять из какого action брать информацию, может есть какой-то более лучший вариант?
Комментарии
Можно создать в классе методы с именами экшенов и вызывать типа так:
<?php
$data = call_user_func([$this, $payload['action']], $payload); ?>
if (!is_callable([$this, $payload['action']])) {
throw new BadRequestHttpException('Action ' . $payload['action'] . ' does not exist');
}