2016-11-23 3 views
0

Я недавно изучил Apigility. Я хочу использовать метод HTTP DELETE для удаления какой-либо сущности, но перед удалением мне нужно проверить «entityId», который должен быть указан и должен быть цифрой и обрезкой. В документации к документации упоминается, что:Zend Apigility: DELETE HTTP-метод Validation

Проверка содержания в настоящее время работает только для запросов POST, PATCH и PUT. Если вам нужно проверить параметры строки запроса, вам нужно будет написать свою собственную логику для этих задач. https://apigility.org/documentation/content-validation/intro меня сделать некоторые логотипо изменения в конфигурационном файле, как показано ниже:

'NetworkingNightAPI\\V1\\Rpc\\DeleteSlotByLoginUser\\Controller' => [ 
    'DELETE' => 'NetworkingNightAPI\\V1\\Rpc\\AssignTimeSlotToLoginUser\\Validator', 
     ], 

Как я уже Упоминание УДАЛИТЬ метод для проверки такой же, как NetworkingNightAPI \ V1 \ Rpc \ AssignTimeSlotToLoginUser \ Validator но вопрос всегда возвращать «Value не может быть пустым », даже я добавил допустимые значения JSON строки, используя PostMan

Спасибо!

+0

Использование Почтальона, когда я прохожу EntityId в строке запроса, как EntityId = 1, то он получил подтверждение, но когда я прохожу строку JSON в теле его дозу не –

ответ

0

Если вы хотите удалить ресурс, вы должны использовать url, который включает в себя маршрут к этому объекту. Это означает, что id будет в параметрах вашего маршрута, а не в ваших параметрах запроса. Таким образом, идентификатор является параметром/идентификатором маршрута, а RestController будет искать ваш объект с использованием идентификатора в методе fetch($id) вашего слушателя ресурсов. Слушатель должен вернуть не найденный (404) ответ в случае, если сущность с этим идентификатором не существует.

Подтверждение содержания, которое вы указываете в своем вопросе, предназначено для проверки параметров POST/GET. Поэтому нет необходимости в таком валидаторе в случае запроса удаления.

Так говорят, например, вы хотите удалить Slot вы бы маршрут:

api/v1/slots/[slot_id] 

И если вы хотите удалить Slot с идентификатором 1 вы бы отправить запрос удаления на:

DELETE 
api/v1/slots/1 

Ваш слушатель должен просто вернуть ответ 404 в случае, если Slot с slot_id1 не существует.

0

Я вижу, что вы используете RPC Вместо стиля Rest - если вы передаете параметр, используя строку запроса вы должны проверить это самостоятельно внутри контроллера, например:

public function someActionMethod() 
{ 
    $id = $this->getRequest()->getQuery('id'); 
    $validator = new Input('id'); 
    $validator->getValidatorChain() 
     ->attach(new \Zend\Validator\NotEmpty()) 
    ; 
    $validator->getFilterChain() 
     ->attach(new StringToUpper()) 
    ; 
    $inputFilter = new InputFilter(); 
    $inputFilter 
     ->add($validator) 
     ->setData($this->getRequest()->getQuery()) 
    ; 

    if(! $inputFilter->isValid()) { 
     return new \ZF\ApiProblem\ApiProblemResponse(
      new ApiProblem(400, $inputFilter) 
     ); 
    } 
} 

Apigility выиграл Не используйте любую конфигурацию, сгенерированную с помощью пользовательского интерфейса, для проверки этих полей, которые вы передали через строку запроса, как говорится в документах, - они будут проигнорированы. Вам нужно будет генерировать валидатор самостоятельно.

Вы можете настроить его для генерации проверки с помощью конфигурации, если хотите, а затем загрузить валидатор внутри контроллера, чтобы сохранить код котельной таблички, как указано выше.

+0

I предпочитают проверять данные в config fi le –

+0

Хорошо, поскольку упомянутая apigility не загрузит их для вас, вам все равно нужно заставить валидатор самостоятельно загружать данные из конфига. – Andrew

0

Спасибо за Ваш ответ

Что я нашел Apigility использует модуль «ZF-контента проверки» для проверки входных данных (https://github.com/zfcampus/zf-content-validation)

Эта доза модуль не ограничивают такие методы HTTP вы также можете применить валидацию к методу DELETE. Как и сказано, что

«В приведенном выше примере служба Application \ Controller \ HelloWorld \ Validator будет выбрана для запросов PATCH, PUT или DELETE, а Application \ Controller \ HelloWorld \ CreationValidatorw плохой выбор для запросов POST. "

Так что вам просто нужно добавить ручной ввод для УДАЛИТЬ метода в конфигурационном файле, как показано ниже:

'NetworkingNightAPI\\V1\\Rpc\\DeleteSlotByLoginUser\\Controller' => [ 
      'input_filter' => 'NetworkingNightAPI\\V1\\Rpc\\DeleteSlotByLoginUser\\Validator', 
      'DELETE' => 'NetworkingNightAPI\\V1\\Rpc\\DeleteSlotByLoginUser\\Validator', 
     ], 

В капельную HTTP DELETE метод не будет проверять с помощью строки тела JSON из POSTMAN вы должны передать параметры запроса и в контроллер вы должны получить проверенные данные, используя плагин, как показано ниже:

$recruiterId = $this->getInputFilter()->getValues()['recruiterId']; 
$timeSlotId = $this->getInputFilter()->getValues()['timeSlotId']; 
+0

уверен, что не сработает :) – Andrew

Смежные вопросы