# metricool/2.1.1/app/Features/UserSettings/Factories/FieldFactory.php

Metricool – Social media and site statistics, version 2.1.1. 37 lines.

- Page: https://pluginprobe.com/plugins/metricool/2.1.1/code/app/Features/UserSettings/Factories/FieldFactory.php
- Raw: https://pluginprobe.com/plugins/metricool/2.1.1/raw/app/Features/UserSettings/Factories/FieldFactory.php
- Modified: 2026-08-20T14:08:30+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/metricool/2.1.1/code/app/Features/UserSettings/Factories/FieldFactory.php#L10-L20`.

```php
<?php

declare(strict_types=1);

namespace Metricool\Features\UserSettings\Factories;

use Metricool\Features\UserSettings\Fields\Field;
use Metricool\Features\UserSettings\Storage\AbstractStorage;

class FieldFactory
{
    private const FIELDS_NAMESPACE = '\\Metricool\\Features\\UserSettings\\Fields\\';

    /**
     * Creates a field from the user_settings configuration
     * @see config/user_settings.php
     */
    public static function createFromConfig(string $name, array $config, ?AbstractStorage $storage = null): Field
    {
        $fieldClassName = ($config['field'] ?? 'Field');
        $fieldClass = self::FIELDS_NAMESPACE . $fieldClassName;

        if (!class_exists($fieldClass)) {
            throw new \InvalidArgumentException('Field "' . esc_html($fieldClass) . '" not found');
        }

        $field = new $fieldClass($name);
        $field->applyConfig($config);

        if ($storage !== null) {
            $field->setStorage($storage);
        }

        return $field;
    }
}

```
