If we want to send data of array type in the http header, employeeChildren must be written as an array, as in the following example.
/**
* @var array
* @OA\Property(
* type="array",
* @OA\Items(
* @OA\Property(
* property="childId",
* type="string",
* ),
* @OA\Property(
* property="childName",
* type="string",
* ),
* @OA\Property(
* property="childBirthdate",
* type="string",
* ),
* ),
* );
*/
public $employeeChildren;
{
"employeeId": "string",
"name": "string",
"surname": "string",
"employeeChildren": [
{
"childId" : "string",
"childNameSurname" : "string"
}
]
}
[
"employeeId" => "string",
"name" => "string",
"surname" => "string",
"employeeChildren" => [
[
"childId" => "string",
"childNameSurname" => "string",
]
],
]
Within the Employees\SaveFilter class, App\Filter\CollectionInputFilter and EmployeeChildren array type can be filtered by defining the following.
namespace App\Filter\Employees;
use Laminas\Validator\Uuid;
use Laminas\Validator\Date;
use Laminas\Validator\InArray;
use Laminas\Validator\StringLength;
use Laminas\Validator\Db\RecordExists;
use Laminas\Validator\Db\NoRecordExists;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\InputFilter\InputFilterPluginManager;
class SaveFilter extends InputFilter
{
public function __construct(
AdapterInterface $adapter,
CommonModel $commonModel,
InputFilterPluginManager $filter
)
{
$this->filter = $filter;
$this->adapter = $adapter;
$this->commonModel = $commonModel;
}
public function setInputData(array $data)
{
$this->add([
'name' => 'id',
'required' => true,
'validators' => [
['name' => Uuid::class],
[
'name' => HTTP_METHOD == 'POST' ? NoRecordExists::class : RecordExists::class,
'options' => [
'table' => 'employees',
'field' => 'employeeId',
'adapter' => $this->adapter,
]
]
],
]);
$this->add([
'name' => 'name',
'required' => true,
'validators' => [
[
'name' => StringLength::class,
'options' => [
'encoding' => 'UTF-8',
'min' => 2,
'max' => 60,
],
],
],
]);
$this->add([
'name' => 'surname',
'required' => true,
'validators' => [
[
'name' => StringLength::class,
'options' => [
'encoding' => 'UTF-8',
'min' => 2,
'max' => 60,
],
],
],
]);
// Employee children "array input filter"
//
$collection = $this->filter->get(CollectionInputFilter::class);
$collectionFilter = $this->filter->get(InputFilter::class);
$collectionFilter->add([
'name' => 'childId',
'required' => false,
'validators' => [
['name' => Uuid::class],
],
]);
$collectionFilter->add([
'name' => 'childNameSurname',
'required' => true,
'validators' => [
[
'name' => StringLength::class,
'options' => [
'encoding' => 'UTF-8',
'min' => 3,
'max' => 160,
],
],
],
]);
$collectionFilter->add([
'name' => 'childBirthdate',
'required' => false,
'validators' => [
[
'name' => Date::class,
'options' => [
'format' => 'Y-m-d',
'strict' => true,
]
],
],
]);
$collection->setInputFilter($collectionFilter);
$this->add($collection, 'employeeChildren');
// Set input data
//
$this->renderInputData($data);
}
}