Bake\Shell\Task\ModelTask::fieldValidation PHP Method

fieldValidation() public method

Does individual field validation handling.
public fieldValidation ( Cake\Database\Schema\Table $schema, string $fieldName, array $metaData, string $primaryKey ) : array
$schema Cake\Database\Schema\Table The table schema for the current field.
$fieldName string Name of field to be validated.
$metaData array metadata for field
$primaryKey string The primary key field
return array Array of validation for the field.
    public function fieldValidation($schema, $fieldName, array $metaData, $primaryKey)
    {
        $ignoreFields = ['lft', 'rght', 'created', 'modified', 'updated'];
        if (in_array($fieldName, $ignoreFields)) {
            return false;
        }
        $rule = false;
        if ($fieldName === 'email') {
            $rule = 'email';
        } elseif ($metaData['type'] === 'uuid') {
            $rule = 'uuid';
        } elseif ($metaData['type'] === 'integer') {
            $rule = 'integer';
        } elseif ($metaData['type'] === 'float') {
            $rule = 'numeric';
        } elseif ($metaData['type'] === 'decimal') {
            $rule = 'decimal';
        } elseif ($metaData['type'] === 'boolean') {
            $rule = 'boolean';
        } elseif ($metaData['type'] === 'date') {
            $rule = 'date';
        } elseif ($metaData['type'] === 'time') {
            $rule = 'time';
        } elseif ($metaData['type'] === 'datetime') {
            $rule = 'dateTime';
        } elseif ($metaData['type'] === 'timestamp') {
            $rule = 'dateTime';
        } elseif ($metaData['type'] === 'inet') {
            $rule = 'ip';
        }
        $allowEmpty = false;
        if (in_array($fieldName, $primaryKey)) {
            $allowEmpty = 'create';
        } elseif ($metaData['null'] === true) {
            $allowEmpty = true;
        }
        $validation = ['valid' => ['rule' => $rule, 'allowEmpty' => $allowEmpty]];
        foreach ($schema->constraints() as $constraint) {
            $constraint = $schema->constraint($constraint);
            if (!in_array($fieldName, $constraint['columns']) || count($constraint['columns']) > 1) {
                continue;
            }
            if ($constraint['type'] === SchemaTable::CONSTRAINT_UNIQUE) {
                $validation['unique'] = ['rule' => 'validateUnique', 'provider' => 'table'];
            }
        }
        return $validation;
    }