PHPackages                             goldfinch/fielder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. goldfinch/fielder

ActiveSilverstripe-vendormodule[Utility &amp; Helpers](/categories/utility)

goldfinch/fielder
=================

Field is fields manager and orginizer for Silverstripe

v2.0.23(1y ago)01.2k↓33.3%117MITPHPPHP &gt;=8.0

Since Jan 24Pushed 1y ago1 watchersCompare

[ Source](https://github.com/goldfinch/fielder)[ Packagist](https://packagist.org/packages/goldfinch/fielder)[ RSS](/packages/goldfinch-fielder/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (3)Versions (36)Used By (17)

🦅 Fielder, fields manager for Silverstripe
==========================================

[](#-fielder-fields-manager-for-silverstripe)

[![Silverstripe Version](https://camo.githubusercontent.com/a798a57963ddebe0c33c27c757b7722fc95a0a6cc52f7c1839a90238934cafe4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53696c7665727374726970652d253545352e312d3030356165312e7376673f6c6162656c436f6c6f723d7768697465266c6f676f436f6c6f723d666666666666266c6f676f3d646174613a696d6167652f7376672b786d6c3b6261736536342c50484e325a79423462577875637a30696148523063446f764c336433647935334d793576636d63764d6a41774d43397a646d636949485a705a58644362336739496a41674d4341784d4445754d446b78494455344c6a55314e5349675a6d6c7362443069497a41774e57466c4d53496765473173626e4d36646a30696148523063484d364c7939325a574e30595335706279397559573576496a3438634746306143426b50534a4e4e5441754d444531494455754f445534624330794d5334794f444d674d5451754f5745324c6a55674e693431494441674d434177494463754e445134494445774c6a59314e4777794d5334794f444d744d5451754f574d344c6a67784d7930324c6a4533494449774c6a6b324c5451754d444934494449334c6a457a494451754e7a6732637a51754d444934494449774c6a6b324c5451754e7a6731494449334c6a457a624330324c6a59354d5341304c6a59334e6d4d314c6a55304d6941354c6a51784f4341784f4334774e7a67674e5334304e5455674d6a4d754e7a637a4c5451754e6a553051544d794c6a513349444d794c6a5133494441674d434177494455774c6a41784e5341314c6a67324d6e70744d5334774e5467674e4459754f444933624449784c6a49344e4330784e433435595459754e5341324c6a55674d434178494441744e7934304e446b744d5441754e6a557a5444517a4c6a59794d7941304d6934774d6a686a4c5467754f44457a494459754d5463744d6a41754f545535494451754d4449354c5449334c6a45794f5330304c6a63344e484d744e4334774d6a6b744d6a41754f545535494451754e7a67304c5449334c6a45794f5777324c6a59354d5330304c6a59334e6b4d794d6934304d79307a4c6a6b334e6941354c6a67354e4330754d44457a494451754d546b34494445774c6a41354e6d457a4d6934304e79417a4d6934304e794177494441674d4341304e6934344e7a55674e4449754e546b7965694976506a777663335a6e50673d3d)](https://packagist.org/packages/goldfinch/fielder)[![Package Version](https://camo.githubusercontent.com/2055754b053912dd84f58941baf67e24a0236a15f9f8bb9d5edd3394476b7972/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f676f6c6466696e63682f6669656c6465722e7376673f6c6162656c436f6c6f723d33333326636f6c6f723d463843363330266c6162656c3d56657273696f6e)](https://packagist.org/packages/goldfinch/fielder)[![Total Downloads](https://camo.githubusercontent.com/a7e473c91b8f13619b902a29c184e6b6c86d47fa432b2b56db98b1336ff957f9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f676f6c6466696e63682f6669656c6465722e7376673f6c6162656c436f6c6f723d33333326636f6c6f723d463843363330266c6162656c3d446f776e6c6f616473)](https://packagist.org/packages/goldfinch/fielder)[![License](https://camo.githubusercontent.com/cb3a89d9b05423df10eb6a9c77a4ff53856362e70ae85dd555be3e30ffc91629/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f676f6c6466696e63682f6669656c6465722e7376673f6c6162656c436f6c6f723d33333326636f6c6f723d463843363330266c6162656c3d4c6963656e7365)](https://packagist.org/packages/goldfinch/fielder)

Fielder 🚜 is fields organizer that helps to simplify fields declaration and makes it easy to manage all in one place, keeping it clean with less code.

Install
-------

[](#install)

```
composer require goldfinch/fielder
```

Usage
-----

[](#usage)

Fielder within the cms fields in `DataObject`

```
use SilverStripe\ORM\DataObject;

MyAwesomeModel extends DataObject
{
    public function getCMSFields()
    {
        $fields = parent::getSettingsFields()->initFielder($this);

        $fielder = $fields->getFielder();

        $fielder->remove('Content');

        $fielder->required([
            'FirstName',
            'About',
        ]);

        $fielder->fields([
            'Root.Main' => [
                $fielder->string('FirstName', 'First name'),
                $fielder->text('About'),
                $fielder->html('Content'),
            ],
            'Root.Demo' => [
                $fielder->string('Headline'),
            ],
        ]);

        return $fields;
    }
}
```

Fielder within the settings fields in `SiteTree`

```
use SilverStripe\CMS\Model\SiteTree;

MyAwesomePage extends SiteTree
{
    public function getSettingsFields()
    {
        $fields = parent::getSettingsFields()->initFielder($this);

        $fielder = $fields->getFielder();

        $fielder->remove('ShowInMenus');

        return $fields;
    }
}
```

Fielder has its own validator method to ease validation process (see [validate method](https://github.com/goldfinch/fielder#list-of-available-methods)). Having said that the default SS validation method can still be presented and will be called alongside.

```
use SilverStripe\ORM\DataObject;

MyAwesomeModel extends DataObject
{
    public function getCMSFields()
    {
        $fields = parent::getSettingsFields()->initFielder($this);

        $fielder = $fields->getFielder();

        // fielder validation
        $fielder->validate([
            'Email' => 'required|email'
        ]);

        return $fields;
    }

    // default SS validation
    public function validate()
    {
        $result = parent::validate();

        if ($this->Title != 'Home') {
            $result->addError('Title is invalid');
        }

        return $result;
    }
}
```

Fielder in extension

```
use SilverStripe\ORM\DataExtension;

class MyExtension extends DataExtension
{
    public function updateCMSFields($fields)
    {
        $fields->initFielder($this->owner);

        $fielder = $fields->getFielder();

        $fielder->validate([
            'Email' => 'required|email',
        ]);
    }

    public function updateSettingsFields($fields)
    {
        $fields->initFielder($this->owner);

        $fielder = $fields->getFielder();

        $fielder->remove('ShowInMenus');
    }
}
```

List of available methods
-------------------------

[](#list-of-available-methods)

> declare fields in tabs

```
$fielder->fields([
  'Root.Main' => [
    $fielder->string('Title'),
  ],
])
```

> declare fields removing previously declared fields

```
$fielder->freshFields([
  'Root.Main' => [
    $fielder->string('Title'),
  ],
])
```

> insert after

```
$fielder->insertAfter('MenuTitle', $fielder->string('Title'));

$fielder->insertAfter('MenuTitle', [
    $fielder->string('Title'),
    $fielder->text('Content'),
]);
```

> insert before

```
$fielder->insertBefore('MenuTitle', $fielder->string('Title'));

$fielder->insertBefore('MenuTitle', [
    $fielder->string('Title'),
    $fielder->text('Content'),
]);
```

> reorder fields

```
$fielder->reorder(['Content', 'MenuTitle']);
```

> reorder tabs

```
$fielder->reorderTabs([
    'Root.Demo',
    'Root.Main'
]);
```

> add fields to tab

```
$fielder->toTab('Root.Demo', [
    $fielder->string('Title'),
    $fielder->text('Content'),
]);
```

> get data field, same as `dataFieldByName`

```
$fielder->dataField('Title');
```

> get field, same as `scaffoldFormField`

```
$fielder->field('Title');
```

> required field

```
$fielder->required('Title')
$fielder->required(['Title', 'Content']);

//through validate method (recommended)

$fielder->validate([
    'Title' => 'required',
]);
```

> remove specific fields

```
$fielder->remove('Title');
```

> remove all fields

```
$fielder->removeAll();
```

> remove all fields within the class (ignores fields that were added through inherited or extended classes)

```
$fielder->removeAllCurrent();
```

> remove fields in tab

```
$fielder->removeFieldsInTab('Root.Main');
// same as
$fielder->clearTab('Root.Main');
```

> add description field

```
$fielder->description('Title', 'Some field description flies here');
// ..
$fielder->description([
    'Title' => 'Some field description flies here',
    'URLSegment' => 'Red field description'
]);
```

> disable field

```
$fielder->disable('Title');
$fielder->disable('Title', false); // undisabled
// ..
$fielder->disable(['Title', 'Text']);
$fielder->disable(['Title', 'Text'], false); // undisabled all
```

> readonly field

```
$fielder->readonly('Title');
$fielder->readonly('Title', false); // take off readonly
// ..
$fielder->readonly(['Title', 'Text']);
$fielder->readonly(['Title', 'Text'], false); // take off readonly
```

> add custom error

```
$fielder->addError('Error message'); // error | required | bad | validation
$fielder->addError('Error message', 'info');
$fielder->addError('Error message', 'warning');
$fielder->addError('Error message', 'message');
$fielder->addError('Error message', 'good', null, 'html');
```

> validate fields

**Basic closure validation per each field**

```
$fielder->validate([
    'Title' => function($value, $fail) {
        $max = 100;
        if (strlen($value) > $max) {
            $fail('The :attribute must not be over ' . $max . ' characters.');
        }
    }
]);
```

**Laravel approach (recommended)**

This package comes with Laravel validation components that are ready to use. For more info on what rules are available and how to use them, please refer to [this list](https://laravel.com/docs/10.x/validation#available-validation-rules)

```
use Goldfinch\Illuminate\Rule;

$fielder->validate([
    'Title' => 'required|regex:/^[\d\s\+\-]+$/',
    'Email' => 'required|email',
    'Fruits' => ['required', Rule::in(['apple', 'orange', 'kiwi'])],
]);
```

You can also create a custom rule that will handle your specific validation logic. Use [**Taz**](https://github.com/goldfinch/taz)🌪️ to create a new rule.

eg:

```
php taz make:rule PhoneRule
```

and simply implement it in your validation rules:

```
use App\Rules\PhoneRule;

$fielder->validate([
    'Phone' => ['required', new PhoneRule()],
]);
```

> display logic methods

**Basic coverage, not all functions are yet available.**

```
$fielder->displayIf();
$fielder->displayUnless();
$fielder->hideIf();
$fielder->hideUnless();
```

examples:

```
$fielder->toTab('Root.Demo', [
    $fielder->checkbox('ConditionalField'),
    $fielder->displayIf('ConditionalField', [ // isChecked
    // $fielder->displayIf('!Magic', [ // isNotChecked
    // $fielder->displayIf(['MagicString', '==', null], [ // isEmpty
    // $fielder->displayIf(['MagicString', '!=', null], [ // isNotEmpty
    // $fielder->displayIf(['MagicString', '==', 3], [ // isEqualTo
    // $fielder->displayIf(['MagicString', '==', [2,3]], [ // isEqualTo
    // $fielder->displayIf(['MagicString', '!=', 3], [ // isNotEqualTo
    // $fielder->displayIf(['MagicString', '!=', [2,3]], [ // isNotEqualTo
    // $fielder->displayIf(['MagicString', '>', 3], [ // isGreaterThan
    // $fielder->displayIf(['MagicString', '
