Как установить требуемые параметры POST для маршрутов

С помощью метода GET мы можем сделать что-то вроде этого

example.user
  path: 'example/{user}'
  defaults: 
    _controller: '\Drupal\example\Controller\ExampleController::content' 
  requirements: 
    _permission: 'access content' 
    user: ^[a-zA-Z0-9_]+

, поэтому он задает параметр user, а также ограничивает его формат.

Но я хотел бы сделать что-то подобное с методом POST. Пробовал это, но не работал:

example.user
  path: 'example'
  methods:  [POST]
  defaults: 
    _controller: '\Drupal\example\Controller\ExampleController::content' 
  requirements: 
    _permission: 'access content' 
    user: ^[a-zA-Z0-9_]+

EDIT:

Конечно, я могу установить некоторую логику внутри контроллера, как это, но это не кажется правильным:

public function store(Request $request) {
   $params = json_decode($request->getContent(), TRUE);
   //I'm trying to avoid using these conditions inside controller methods
   if(empty($params['user'])){
      //return error response
   }else{
     if (!preg_match('/^[a-zA-Z0-9_]+/', $params['user'])) {
       //return error response
     }
   }
  //return success response
}

Итак, что такое drupal способ сделать это?

5 голосов | спросил Trupal 29 AM00000050000003831 2016, 05:53:38

2 ответа


0

Я сделал что-то подобное раньше (посмотрите вспомогательную ссылку ), это не требуется рассказать маршрутизатору о типе

просто разместите свои данные и в своем контроллере получите их с помощью

$value = \Drupal::request()->request->get('your_posted_variable'); 

Также вы можете получить все переменные $ _POST с помощью

  \Drupal::request()->request->all(); // equal to $_POST
ответил zhilevan 29 PM00000030000002631 2016, 15:14:26
0

Вам не нужно ничего устанавливать на маршруте, если у вас есть параметр по умолчанию для POST, вы можете добавить значение непосредственно в контроллер:

\ Drupal \ например \ Controller \ ExampleController :: Содержание

Затем вы проверяете, получили ли вы какое-то значение в методе POST, и если у вас есть значения, замените значение по умолчанию.

ответил Adrian Cid Almaguer 29 Mayam18 2018, 06:30:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132