2016-01-08 2 views
0

Я пытаюсь создать простой api, используя apigility для сохранения некоторых данных. У меня есть структура таблицы, как показано ниже. Используя apigility admin ui, я создал службу Resetful post для ниже объекта. createdAt поле необязательно, но я хочу, чтобы поле было заполнено текущим датом, когда оно пустое в запросе. Может кто-то дать процедуру для этого.apigility set значение по умолчанию для поля даты

id integer, 
name string, 
createdAt datetime, 
updatedAt timestamp, 

Вот как выглядит настройка поля администратора.

Мне также нравится знать, как установить валидаторы, чтобы позволить пользователю вводить createdAt как формат «Y-m-d H: i: s». Вы можете направлять мне пожалуйста enter image description here

ответ

1

Есть несколько способов, вы можете идти об этом:

1) Сделать по умолчанию на какой-то даты или даты и функции в вашей настойчивости слоя (как сделать его по умолчанию now() или еще что-нибудь в вашей базе данных).

2) В создании, обновлении, патче и т. Д. Вашего ресурса проверьте, было ли поле передано. Если нет, создайте стандартную метку времени для ввода. Вы также можете сделать это дальше в своих слоях зависимостей, например, в вашем сервисе, картографе или другой зависимости от ресурсов, где когда-либо это имеет смысл.

3) Создайте что-нибудь вроде фильтра NullToDefaultDate. Он будет запущен в вашем нулевом поле и изменит значение null до даты по умолчанию, которую вы предоставляете, прежде чем он попадет в ваш код apigility. Убедитесь, что вы либо получили отфильтрованные значения из введенного InputFilter через $this->getInputFilter()->getValues(); или аналогичные, либо вы установили use_raw_data = false в свой module.config.php в разделе zf-content-validation.

'zf-content-validation' => array( 'YourNamespace\\V1\\Rest\\YourServiceName\\Controller' => array( 'input_filter' => 'YourNamespace\\V1\\Rest\\YourServiceName\\Validator', 'use_raw_data' => false, 'allows_only_fields_in_filter' => true, ) )

Если положить в только «use_raw_data» => ложных, вы получите отфильтрованные значения для полей, которые вы определили в Apigility, но вы также получите дополнительный нефильтрованный «мусор» поля что вы вообще не сказали Apigility. Если вы этого не хотите, вы можете включить allows_only_fields_in_filter, который даст вам только те поля, которые вы определили, но теперь ваш API возвращает ошибку ApiProblem, когда поле, которое не было в списке, передается. Используя $data = $this->getInputFilter()->getValues() в ваших методах вернет вам только поля, которые вы определили, и он также даст вам отфильтрованные значения.

Для второй части вашего вопроса вы хотите использовать валидатор Zend \ Validator \ Date и добавить опцию формата «Y-m-d H: i: s».

Apigility Admin Format for Date Validator

Не забудьте нажать кнопку Добавить вариант, прежде чем сохранить или он не будет держать его.

Надеюсь, это поможет.

+0

Я не вижу никаких сервисов, файлы карт в боковом модуле. Я не вижу, что этот фильтр NullToDefaultDate также недоступен. вы можете быть краткими на нем – Gowri

+0

@ Фильтр Gowri NullToDefaultDate будет фильтром, который вам нужно создать. Служба, mapper и т. Д. Предназначены для того, чтобы стоять вместо любых зависимостей, которые вы ввели в свой ресурс, чтобы ваш API выполнял то, что ему нужно. Если вы выполняете всю работу в методе в ресурсе, тогда это произойдет. –

+0

Я создал фильтр NullToDefaultDate, который исправил мою проблему. У меня много вопросов о apiglity. где я могу установить быструю помощь. – Gowri

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