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.
composer require goldfinch/fielderFielder 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). 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');
}
}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' => '<strong style="color: red">Red field description</strong>'
]);disable field
$fielder->disable('Title');
$fielder->disable('Title', false); // undisabled
// ..
$fielder->disable(['Title', 'Text']);
$fielder->disable(['Title', 'Text'], false); // undisabled allreadonly field
$fielder->readonly('Title');
$fielder->readonly('Title', false); // take off readonly
// ..
$fielder->readonly(['Title', 'Text']);
$fielder->readonly(['Title', 'Text'], false); // take off readonlyadd 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('<strong>Error</strong> 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
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🌪️ to create a new rule.
eg:
php taz make:rule PhoneRuleand 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', '<', 3], [ // isLessThan
$fielder->string('Field1'),
$fielder->string('Field2'),
$fielder->string('Field3'),
])
]);Checkbox field
Class: SilverStripe\Forms\CheckboxField
Suitable DB Type: Boolean
$fielder->checkbox($name, $title = null, $value = null)
// left aligned checkbox (wrapped in composite field)
$fielder->lineCheckbox($name, $title = null, $value = null)Dropdown field
Class: SilverStripe\Forms\DropdownField
Suitable DB Type: *
$fielder->dropdown($name, $title = null, $source = [], $value = null)Readonly field
Class: SilverStripe\Forms\ReadonlyField
Suitable DB Type: *
$fielder->readonlyField($name, $title = null, $value = null)Textarea field
Class: SilverStripe\Forms\TextareaField
Suitable DB Type: *
$fielder->text($name, $title = null, $value = null)Text field
Class: SilverStripe\Forms\TextField
Suitable DB Type: Varchar
$fielder->string($name, $title = null, $value = '', $maxLength = null, $form = null)Password field
Class: SilverStripe\Forms\PasswordField
Suitable DB Type: Varchar
$fielder->password($name, $title = null, $value = '')Action field
Class: SilverStripe\Forms\FormAction
$fielder->action($action, $title = '', $form = null)Password confirm field
Class: SilverStripe\Forms\ConfirmedPasswordField
Suitable DB Type: *
$fielder->passwordConfirmed($name, $title = null, $value = '', $form = null, $showOnClick = false, $titleConfirmField = null)Currency field
Class: SilverStripe\Forms\CurrencyField
Suitable DB Type: Currency
$fielder->currency($name, $title = null, $value = '', $maxLength = null, $form = null)Date field
Class: SilverStripe\Forms\DateField
Suitable DB Type: Date
$fielder->date($name, $title = null, $value = '', $maxLength = null, $form = null)Datetime field
Class: SilverStripe\Forms\DatetimeField
Suitable DB Type: Datetime
$fielder->datetime($name, $title = null, $value = '', $maxLength = null, $form = null)Email field
Class: SilverStripe\Forms\EmailField
Suitable DB Type: Varchar
$fielder->email($name, $title = null, $value = '', $maxLength = null, $form = null)Grouped dropdown field
Class: SilverStripe\Forms\GroupedDropdownField
Suitable DB Type: *
$fielder-> groupedDropdown($name, $title = null, $source = [], $value = null)
// ..
$fielder->groupedDropdown('Name', 'Title', [
'numbers' => [1 => 1, 2 => 2],
'letters' => [1 => 'A', 2 => 'B'],
])
// $source = FooBar::get()->map()HTML Editor field
Class: SilverStripe\Forms\HTMLEditor\HTMLEditorField
Suitable DB Type: HTMLText
$fielder->html($name, $title = null, $value = '', $config = null)Money field
Class: SilverStripe\Forms\MoneyField
Suitable DB Type: Money
$fielder->money($name, $title = null, $value = '')Numeric field
Class: SilverStripe\Forms\NumericField
Suitable DB Type: Decimal Float Int
$fielder->numeric($name, $title = null, $value = '', $maxLength = null, $form = null)Radio field
Class: SilverStripe\Forms\OptionsetField
Suitable DB Type: *
$fielder->radio($name, $title = null, $source = [], $value = null)
// ..
$fielder->radio('Name', 'Title', [1 => 'Option 1', 2 => 'Option 2'])
// $source = FooBar::get()->map()Selection group field
Class: SilverStripe\Forms\SelectionGroup
Suitable DB Type: *
$fielder->selectionGroup($name, $items, $value = null)
// ..
$fielder->selectionGroup('Name', [
$fielder->selectionGroupItem(
'one',
$fielder->literal('one', 'one view'),
'one title'
),
$fielder->selectionGroupItem(
'two',
$fielder->literal('two', 'two view'),
'two title'
),
])Time field
Class: SilverStripe\Forms\TimeField
Suitable DB Type: Time
$fielder->time($name, $title = null, $value = '', $maxLength = null, $form = null)Composite field
Class: SilverStripe\Forms\CompositeField
$fielder->composite($children = null)
// ..
$fielder->composite([
$fielder->string('Title'),
$fielder->html('Text'),
])Group field
Class: SilverStripe\Forms\FieldGroup
$fielder->group($titleOrField = null, ...$otherFields)
// ..
$fielder->group(
'Group name',
$fielder->string('Title'),
$fielder->html('Text'),
)List field. FYI: $fields is FieldList already. Using this field we store new FieldList in FieldList
Class: SilverStripe\Forms\FieldList
$fielder->list($items = [])
// ..
...$fielder->list([
$fielder->string('Title'),
$fielder->html('Text'),
])Tab field
Class: SilverStripe\Forms\Tab
$fielder->tab($name, $titleOrField = null, $fields = null)
// ..
$fielder->tab('Primary tab', $fielder->header('Header'), $fielder->literal('Literal', '<b>Br</b>eaking <b>Ba</b>d'))Tab set field
Class: SilverStripe\Forms\TabSet
$fielder->tabSet($name, $titleOrTab = null, $tabs = null)
// ..
$fielder->tabSet('MyTabSetName',
$fielder->tab('Primary tab', $fielder->header('Header'), $fielder->literal('Literal', '<b>Br</b>eaking <b>Ba</b>d')),
$fielder->tab('Secondary tab', $fielder->header('Header'), $fielder->literal('Literal', '<b>Banshee</b>')),
)Toggle composite field
Class: SilverStripe\Forms\ToggleCompositeField
$fielder->toggleComposite($name, $title, $children)
// ..
$fielder->toggleComposite('MyToggle', 'Toggle', [
$fielder->string('Title'),
$fielder->text('Text')
])Upload field
Class: SilverStripe\AssetAdmin\Forms\UploadField
Suitable relationship: has_one has_many many_many belongs_many_many
$fielder->upload($name, $title = null, SS_List $items = null)File field
Class: SilverStripe\Forms\FileField
Suitable relationship: has_one has_many many_many belongs_many_many
$fielder->file($name, $title = null, $value = null)Checkbox set field
Class: SilverStripe\Forms\CheckboxSetField
Suitable relationship: has_many many_many belongs_many_many
$fielder->checkboxSet($name, $title = null, $source = [], $value = null)
// ..
$fielder->checkboxSet('List', 'List', [1 => 'Set 1', 2 => 'Set 2']),
// $source = FooBar::get()->map()Dropdown tree field (!SiteTree)
Class: SilverStripe\Forms\TreeDropdownField
Suitable relationship: has_one
$fielder->dropdownTree($name, $title = null, $sourceObject = null, $keyField = 'ID', $labelField = 'TreeTitle', $showSearch = true)
// ..
$fielder->dropdownTree('Page')Tree Multiselect field, only for
SilverStripe\Security\Group
Class: SilverStripe\Forms\TreeMultiselectField
Suitable relationship: has_many many_many
$fielder->treeMultiSelect($name, $title = null, $sourceObject = Group::class, $keyField = "ID", $labelField = "Title")Grid field
Class: SilverStripe\Forms\GridField\GridField Goldfinch\Fielder\Grid
Suitable relationship: has_many many_many belongs_many_many
$fielder->grid($name, $title = null, SS_List $dataList = null, GridFieldConfig $config = null)
// ..
$fielder->grid('Services', 'Services')->build()
// ..
$fielder->grid('Services', 'Services', $this->Services())->build()
// ..
$fielder->grid('Cards', 'Cards')
->config('default')
->components([
'add',
'edit',
])
->remove([
'add',
'edit',
'copy',
'delete',
])->build()- might require additional packages
Listbox field
Class: SilverStripe\Forms\ListboxField
Suitable relationship: has_many many_many belongs_many_many
$fielder->listbox($name, $title = null, $source = [], $value = null, $size = null)Header field
Class: use SilverStripe\Forms\HeaderField;
$fielder->header($name, $title = null, $headingLevel = 2)hidden
Hidden field
Class: SilverStripe\Forms\HiddenField
Suitable DB Type: *
$fielder->hidden($name, $title = null, $value = null)Label field
Class: SilverStripe\Forms\LabelField
$fielder->label($name, $title = null)Literal field
Class: SilverStripe\Forms\LiteralField
$fielder->literal($name, $content)Nullable field
Class: SilverStripe\Forms\NullableField
Suitable DB Type: *
$fielder->nullable(FormField $valueField, $isNullLabel = null)
// ..
$fielder->nullable($fielder->string('Text'))Decimal (DB) field
Class: SilverStripe\ORM\FieldType\DBDecimal
Suitable DB Type: Decimal
$fielder->decimal($name, $title = null, $wholeSize = 9, $decimalSize = 2, $defaultValue = 0)Double (DB) field
Class: SilverStripe\ORM\FieldType\DBDouble
Suitable DB Type: Double
$fielder->double($name, $title = null, $defaultVal = 0)Float (DB) field
Class: SilverStripe\ORM\FieldType\DBFloat
Suitable DB Type: Float
$fielder->float($name, $title = null, $defaultVal = 0)Year (DB) field
Class: SilverStripe\ORM\FieldType\DBYear
Suitable DB Type: Year
$fielder->year($name, $title = null, $options = [])Percentage (DB) field
Class: SilverStripe\ORM\FieldType\DBPercentage
Suitable DB Type: Percentage | Percentage(6)
$fielder->percentage($name, $title = null, $precision = 4)Integer (DB) field
Class: SilverStripe\ORM\FieldType\DBInt
Suitable DB Type: Int
$fielder->int($name, $title = null, $defaultVal = 0)Big Integer (DB) field
Class: SilverStripe\ORM\FieldType\DBBigInt
Suitable DB Type: BigInt
$fielder->bigInt($name, $title = null, $defaultVal = 0)Locale (DB) field
Class: SilverStripe\ORM\FieldType\DBLocale
Suitable DB Type: Locale
$fielder->locale($name, $title = null, $size = 16)Enum (DB) field
Class: SilverStripe\ORM\FieldType\DBEnum
Suitable DB Type: Enum("Apple,Orange,Kiwi", "Kiwi")
$fielder->enum($name)SiteTreeURLSegment field
Class: SilverStripe\CMS\Forms\SiteTreeURLSegmentField
Suitable DB Type: *
$fielder->siteTreeURLSegment($name, $title = null, $value = '', $maxLength = null, $form = null)HTMLReadonly field
Class: SilverStripe\Forms\HTMLReadonlyField
Suitable DB Type: *
$fielder->htmlReadonly($name, $title = null, $value = null)composer require goldfinch/shortcodeShortcode field (string)
Suitable DB Type: SCVarchar
$fielder->shortcode($name, $title = null)composer require silvershop/silverstripe-hasonefield dev-mainHasOneButton field
Class: SilverShop\HasOneField\HasOneButtonField
Suitable relationship: has_one belongs_to
$fielder->objectLink($relationName, $fieldName = null, $title = null, GridFieldConfig $customConfig = null, $useAutocompleter = true)composer require gorriecoe/silverstripe-linkfield ^1.1HasOneLink field
Class: gorriecoe\LinkField\Forms\HasOneLinkField
Suitable relationship: has_one belongs_to
$fielder->object($relationName, $title = null, $linkConfig = [], $useAutocompleter = false)composer require kinglozzer/multiselectfield ^2.0MultiSelect field
Class: Kinglozzer\MultiSelectField\Forms\MultiSelectField
Suitable relationship: many_many belongs_many_many
$fielder->multiSelect($name, $title = null, $sort = false, $source = null, $titleField = 'Title')
// ..
$fielder->multiSelect('Services'),
$fielder->multiSelect('Services', 'Services', 'SortExtra'),composer require goldfinch/image-editorEditableUpload field
Class: Goldfinch\ImageEditor\Forms\EditableUploadField
Suitable relationship: has_one has_many many_many belongs_many_many
...$fielder->media($name, $title = null)composer require goldfinch/image-editorEditableSortableUpload field
Class: Goldfinch\ImageEditor\Forms\EditableSortableUploadField
Suitable relationship: has_many many_many belongs_many_many
...$fielder->mediaSortable($name, $title = null)composer require heyday/silverstripe-colorpalette ^2.1ColorPalette field
Class: Heyday\ColorPalette\Fields\ColorPaletteField
Suitable DB Type: *
$fielder->color($name, $title = null, $source = [], $value = null)
// ..
$fielder->color('Color', 'Color', ['yellow' => '#fee12f', 'pink' => '#eb83ad', 'green' => '#70cd77'])composer require ryanpotter/silverstripe-color-field ^1.0Color field
Class: RyanPotter\SilverStripeColorField\Forms\ColorField
Suitable DB Type: *
$fielder->colorPicker($name, $title = null, $value = '', $form = null)Additional requirements:
# yml config (example)
RyanPotter\SilverStripeColorField\Forms\ColorField:
colors:
- '#1976D2'
- '#2196F3'composer require heyday/silverstripe-colorpalette ^2.1GroupedColorPalette field
Class: Heyday\ColorPalette\Fields\GroupedColorPaletteField
Suitable DB Type: *
$fielder->colorGroup($name, $title = null, $source = [], $value = null)
// ..
$fielder->colorGroup('Color', 'Color', ['Primary' => ['yellow' => '#fee12f', 'pink' => '#eb83ad'], 'Secondary' => ['green' => '#70cd77']])composer require goldfinch/json-editorJSONEditor field
Class: Goldfinch\JSONEditor\Forms\JSONEditorField
Suitable DB Type: JSONText Goldfinch\JSONEditor\ORM\FieldType\DBJSONText::class
$fielder->json($name, $title = null, $options = [], $value = '{}', $form = null, $schema = '{}')Additional requirements:
-
create schema fiel:
app/_schema/Page-Parameters.json(app/_schema/{parent-classname}-{field-mame}.json) -
example schema file:
{
"type": "array",
"options": {},
"items": {
"type": "object",
"properties": {
"example": {
"title": "Example",
"type": "string",
"default": "default example text"
}
}
}
}- example field
$fielder->json('Parameters')composer require goldfinch/video-fieldVideo field
Class: Goldfinch\VideoField\Forms\VideoField
Suitable DB Type: Video
$fielder->video($name, $title = null, $value = '', $static = false)See: github.com/goldfinch/video-field
composer require goldfinch/google-fieldsPlace field
Class: Goldfinch\GoogleFields\Forms\PlaceField
Suitable DB Type: Place
$fielder->place($name, $title = null, $value = '')Additional requirements:
.env
APP_GOOGLE_MAPS_KEY=''
See: github.com/goldfinch/google-fields
composer require goldfinch/google-fieldsMap field
Class: Goldfinch\GoogleFields\Forms\MapField
Suitable DB Type: Map
$fielder->map($name, $title = null, $value = '')Additional requirements:
.env
APP_GOOGLE_MAPS_KEY=''
See: github.com/goldfinch/google-fields
composer require maxime-rainville/anyfield ^0.0.0Checkbox field
Class: SilverStripe\AnyField\Form\AnyField
Suitable relationship: has_one
Relationship type: SilverStripe\LinkField\Models\Link::class
Template: vendor/silverstripe/linkfield/templates/SilverStripe/LinkField/Models/Link.ss
$fielder->link($name, $title = null, $value = null)composer require maxime-rainville/anyfield ^0.0.0ManyAny field
Class: SilverStripe\AnyField\Form\ManyAnyField
Suitable relationship: has_many many_many belongs_many_many
Relationship type: SilverStripe\LinkField\Models\Link::class
$fielder->links($name, $title = null, SS_List $dataList = null)Additional requirements:
Required $has_one on SilverStripe\LinkField\Models\Link
eg:
private static $has_one = [
'Page' => \Page::class,
];composer require silverstripe/linkfield ^3Link field
Class: SilverStripe\LinkField\Form\LinkField
Suitable relationship: has_many many_many belongs_many_many
Relationship type: SilverStripe\LinkField\Models\Link::class
$fielder->linkSS($name, $title = null, $value = null)composer require gorriecoe/silverstripe-linkfield ^1.1Link field
Class: gorriecoe\LinkField\LinkField
Suitable relationship: has_one
Relationship type: gorriecoe\Link\Models\Link::class
$fielder->linkRel($name, $title = null, $linkConfig = [])
// ..
$fielder->linkRel('ALink', 'Link')composer require kevingroeger/codeeditorfield ^1.2CodeEditor field
Class: KevinGroeger\CodeEditorField\Forms\CodeEditorField
Suitable DB Type: *
$fielder->code($name, $title = null, $value = null, $mode = 'ace/mode/html', $theme = 'ace/theme/github')composer require silverstripe/tagfield ^3.0Tag field
Class: SilverStripe\TagField\TagField
Suitable relationship: has_many many_many belongs_many_many
$fielder->tag($name, $title = null, $source = [], $value = null, $titleField = 'Title')composer require goldfinch/silverstripe-image-pointsPoint field
Class: LittleGiant\SilverStripeImagePoints\DataObjects\Point
Suitable relationship: has_many many_many belongs_many_many
$fielder->points($name, $title = null, $source = [], $gridconfig = null)Additional requirements:
- model
use LittleGiant\SilverStripeImagePoints\DataObjects\Point;
use SilverStripe\Assets\Image;
private static $has_one = [
'Image' => Image::class,
];
private static $has_many = [
'ImagePoints' => Point::class . '.PointOf',
];
private static $owns = [
'Image',
];- yml config
LittleGiant\SilverStripeImagePoints\DataObjects\Point:
image_width: 1918
image_height: 822- example field
$fielder->points('ImagePoints')composer require unclecheese/display-logicWrapper field
Class: UncleCheese\DisplayLogic\Forms\Wrapper
$fielder->wrapper($children)composer require tractorcow/silverstripe-autocomplete ^5.0Autocomplete field
Class: TractorCow\AutoComplete\AutoCompleteField
Suitable DB Type: *
$fielder->autocomplete($name, $title = null, $value = '', $sourceClass = null, $sourceFields = null)
// ..
$fielder->autocomplete('Page', 'Page', '', Page::class, 'Title')composer require silverstripe/tagfield ^3.0StringTag field
Class: SilverStripe\TagField\StringTagField
Suitable DB Type: *
$fielder->stringTag($name, $title = null, $source = [], $value = null)
// ..
$fielder->stringTag('Varchar', 'Varchar', MyDataObject::get())composer require goldfinch/image-editorImageCoords field
Class: Goldfinch\ImageEditor\Forms\ImageCoordsField
Suitable relationship: has_one
$fielder->imageCoords($name, $title, $onlyCanvas = false, $cssGrid = false, $image = null, $XFieldName = null, $YFieldName = null, $xySumFieldName = null, $width = null, $height = null)
// ..
$fielder->imageCoords('Image', 'Focus Point', true)
$fielder->imageCoords('Image', 'Focus Point')composer require lekoala/silverstripe-encrypt dev-masterEncrypt field
Class: LeKoala\Encrypt\EncryptHelper
Suitable DB Type:
'MyText' => LeKoala\Encrypt\EncryptedDBText::class,
'MyHTMLText' => LeKoala\Encrypt\EncryptedDBHTMLText::class,
'MyVarchar' => LeKoala\Encrypt\EncryptedDBVarchar::class,
'MyNumber' => LeKoala\Encrypt\EncryptedNumberField::class,
'MyIndexedVarchar' => LeKoala\Encrypt\EncryptedDBField::class,
$fielder->encrypt($name)composer require dynamic/silverstripe-country-dropdown-field ^2.0CountryDropdown field
Class: Dynamic\CountryDropdownField\Fields\CountryDropdownField
Suitable DB Type: *
$fielder->country($name, $title = null, $source = [], $value = '', $form = null)composer require goldfinch/icon-fieldIcon field
Class: Goldfinch\IconField\Forms\IconField
Suitable DB Type: Icon Goldfinch\IconField\ORM\FieldType\DBIcon::class
$fielder->icon($set, $name, $title = null, $value = '')Additional requirements:
Set .yml config github.com/goldfinch/icon-field
composer require innoweb/silverstripe-international-phone-number-field dev-masterPhone (DB) field
Class: Innoweb\InternationalPhoneNumberField\ORM\DBPhone
Suitable DB Type: Phone
$fielder->phone($name, $title = null, $options = [])Template output
$Phone.International
$Phone.National
$Phone.E164
$Phone.RFC3966
$Phone.URL<% if Phone %>
<% with Phone %>
<a href="$URL" title="$International">$National</a>
<% end_with %>
<% end_if %>composer require goldfinch/silverstripe-imageselection-fieldPhone (DB) field
Class: NSWDPC\Forms\ImageSelectionField\ImageSelectionField
Suitable relationship:
'Image' => Image::class,
'Images' => Image::class,$fielder->mediaSelect($name, $relationList, $title = null)
// ..
$fielder->mediaSelect('Image', 'Images')Template output
$Phone.International
$Phone.National
$Phone.E164
$Phone.RFC3966
$Phone.URLThe MIT License (MIT)