Craft 3 Class Reference

Interface craft\base\FieldInterface

Extends
craft\base\SavableComponentInterface
Implemented by
craft\base\Field, craft\fields\Assets, craft\fields\BaseOptionsField, craft\fields\BaseRelationField, craft\fields\Categories, craft\fields\Checkboxes, craft\fields\Color, craft\fields\Date, craft\fields\Dropdown, craft\fields\Email, craft\fields\Entries, craft\fields\Lightswitch, craft\fields\Matrix, craft\fields\MissingField, craft\fields\MultiSelect, craft\fields\Number, craft\fields\PlainText, craft\fields\RadioButtons, craft\fields\Table, craft\fields\Tags, craft\fields\Url, craft\fields\Users
Available since version
3.0
Source Code
https://github.com/craftcms/cms/blob/master/src/base/FieldInterface.php

FieldInterface defines the common interface to be implemented by field classes.

A class implementing this interface should also use craft\base\SavableComponentTrait and craft\base\FieldTrait.

Public Methods
Method Description Defined By
afterDelete() Performs actions after a component is deleted. craft\base\SavableComponentInterface
afterElementDelete() Performs actions after the element has been deleted. craft\base\FieldInterface
afterElementSave() Performs actions after the element has been saved. craft\base\FieldInterface
afterSave() Performs actions after a component is saved. craft\base\SavableComponentInterface
beforeDelete() Performs actions before a component is deleted. craft\base\SavableComponentInterface
beforeElementDelete() Performs actions before an element is deleted. craft\base\FieldInterface
beforeElementSave() Performs actions before an element is saved. craft\base\FieldInterface
beforeSave() Performs actions before a component is saved. craft\base\SavableComponentInterface
displayName() Returns the display name of this class. craft\base\ComponentInterface
getContentColumnType() Returns the column type that this field should get within the content table. craft\base\FieldInterface
getElementValidationRules() Returns the validation rules for an element with this field. craft\base\FieldInterface
getGroup() Returns the field’s group. craft\base\FieldInterface
getInputHtml() Returns the field’s input HTML. craft\base\FieldInterface
getIsNew() Returns whether the component is new (unsaved). craft\base\SavableComponentInterface
getIsTranslatable() Returns whether the field should be shown as translatable in the UI. craft\base\FieldInterface
getSearchKeywords() Returns the search keywords that should be associated with this field. craft\base\FieldInterface
getSettings() Returns an array of the component’s settings. craft\base\SavableComponentInterface
getSettingsHtml() Returns the component’s settings HTML. craft\base\SavableComponentInterface
getStaticHtml() Returns a static (non-editable) version of the field’s input HTML. craft\base\FieldInterface
getTranslationKey() Returns the field’s translation key, based on a given element. craft\base\FieldInterface
hasContentColumn() Returns whether this field has a column in the content table. craft\base\FieldInterface
isSelectable() Returns whether the component should be selectable in component Type selects. craft\base\SavableComponentInterface
isValueEmpty() Returns whether the given value should be considered “empty” to a validator. craft\base\FieldInterface
modifyElementsQuery() Modifies an element query. craft\base\FieldInterface
normalizeValue() Normalizes the field’s value for use. craft\base\FieldInterface
serializeValue() Prepares the field’s value to be stored somewhere, like the content table or JSON-encoded in an entry revision table. craft\base\FieldInterface
setIsFresh() Sets whether the field is fresh. craft\base\FieldInterface
settingsAttributes() Returns the list of settings attribute names. craft\base\SavableComponentInterface
supportedTranslationMethods() Returns which translation methods the field supports. craft\base\FieldInterface
validate() Validates the component. craft\base\SavableComponentInterface

Method Details

afterElementDelete() public abstract method #

Performs actions after the element has been deleted.

public abstract void afterElementDelete ( craft\base\ElementInterface $element )
$element craft\base\ElementInterface The element that was just deleted

afterElementSave() public abstract method #

Performs actions after the element has been saved.

public abstract void afterElementSave ( craft\base\ElementInterface $element, \craft\base\bool $isNew )
$element craft\base\ElementInterface The element that was just saved
$isNew boolean Whether the element is brand new

beforeElementDelete() public abstract method #

Performs actions before an element is deleted.

public abstract boolean beforeElementDelete ( craft\base\ElementInterface $element )
$element craft\base\ElementInterface The element that is about to be deleted
return boolean Whether the element should be deleted

beforeElementSave() public abstract method #

Performs actions before an element is saved.

public abstract boolean beforeElementSave ( craft\base\ElementInterface $element, \craft\base\bool $isNew )
$element craft\base\ElementInterface The element that is about to be saved
$isNew boolean Whether the element is brand new
return boolean Whether the element should be saved

getContentColumnType() public abstract method #

Returns the column type that this field should get within the content table.

This method will only be called if hasContentColumn() returns true.

See also yii\db\QueryBuilder::getColumnType().

public abstract string getContentColumnType ( )
return string The column type. yii\db\QueryBuilder::getColumnType() will be called to convert the give column type to the physical one. For example, string will be converted as varchar(255) and string(100) becomes varchar(100). not null will automatically be appended as well.

getElementValidationRules() public abstract method #

Returns the validation rules for an element with this field.

Rules should be defined in the array syntax required by yii\base\Model::rules(), with one difference: you can skip the first argument (the attribute list). Below are some examples:

[
    // explicitly specify the field attribute
    [$this->handle, 'string', 'min' => 3, 'max' => 12],
    // skip the field attribute
    ['string', 'min' => 3, 'max' => 12],
    // you can only pass the validator class name/handle if not setting any params
    'bool',
];
public abstract array getElementValidationRules ( )

getGroup() public abstract method #

Returns the field’s group.

public abstract craft\records\FieldGroup, null getGroup ( )

getInputHtml() public abstract method #

Returns the field’s input HTML.

An extremely simple implementation would be to directly return some HTML:

return '<textarea name="'.$name.'">'.$value.'</textarea>';

For more complex inputs, you might prefer to create a template, and render it via craft\web\View::renderTemplate(). For example, the following code would render a template located at path/to/myplugin/templates/_fieldinput.html, passing the $name and $value variables to it:

return Craft::$app->view->renderTemplate('myplugin/_fieldinput', [
    'name'  => $name,
    'value' => $value
]);

If you need to tie any JavaScript code to your input, it’s important to know that any name= and id= attributes within the returned HTML will probably get namespaced, however your JavaScript code will be left untouched. For example, if getInputHtml() returns the following HTML:

<textarea id="foo" name="foo"></textarea>
<script type="text/javascript">
    var textarea = document.getElementById('foo');
</script>

…then it might actually look like this before getting output to the browser:

<textarea id="namespace-foo" name="namespace[foo]"></textarea>
<script type="text/javascript">
    var textarea = document.getElementById('foo');
</script>

As you can see, that JavaScript code will not be able to find the textarea, because the textarea’s id= attribute was changed from foo to namespace-foo. Before you start adding namespace- to the beginning of your element ID selectors, keep in mind that the actual namespace is going to change depending on the context. Often they are randomly generated. So it’s not quite that simple.

Thankfully, craft\web\View provides a couple handy methods that can help you deal with this:

So here’s what a getInputHtml() method that includes field-targeting JavaScript code might look like:

public function getInputHtml($value, $element)
{
    // Come up with an ID value based on $name
    $id = Craft::$app->view->formatInputId($name);
    // Figure out what that ID is going to be namespaced into
    $namespacedId = Craft::$app->view->namespaceInputId($id);
    // Render and return the input template
    return Craft::$app->view->renderTemplate('myplugin/_fieldinput', [
        'name'         => $name,
        'id'           => $id,
        'namespacedId' => $namespacedId,
        'value'        => $value
    ]);
}

And the _fieldinput.html template might look like this:

<textarea id="{{ id }}" name="{{ name }}">{{ value }}</textarea>
<script type="text/javascript">
    var textarea = document.getElementById('{{ namespacedId }}');
</script>

The same principles also apply if you’re including your JavaScript code with craft\web\View::registerJs().

public abstract string getInputHtml ( $value, craft\base\ElementInterface $element null )
$value mixed The field’s value. This will either be the normalized value, raw POST data (i.e. if there was a validation error), or null
$element craft\base\ElementInterface, null The element the field is associated with, if there is one
return string The input HTML.

getIsTranslatable() public abstract method #

Returns whether the field should be shown as translatable in the UI.

Note this method has no effect on whether the field’s value will get copied over to other sites when the entry is actually getting saved. That is determined by getTranslationKey().

public abstract boolean getIsTranslatable ( craft\base\ElementInterface $element null )
$element craft\base\ElementInterface, null The element being edited

getSearchKeywords() public abstract method #

Returns the search keywords that should be associated with this field.

The keywords can be separated by commas and/or whitespace; it doesn’t really matter. craft\services\Search will be able to find the individual keywords in whatever string is returned, and normalize them for you.

public abstract string getSearchKeywords ( $value, craft\base\ElementInterface $element )
$value mixed The field’s value
$element craft\base\ElementInterface The element the field is associated with, if there is one
return string A string of search keywords.

getStaticHtml() public abstract method #

Returns a static (non-editable) version of the field’s input HTML.

This function is called to output field values when viewing entry drafts.

public abstract string getStaticHtml ( $value, craft\base\ElementInterface $element )
$value mixed The field’s value
$element craft\base\ElementInterface The element the field is associated with
return string The static version of the field’s input HTML

getTranslationKey() public abstract method #

Returns the field’s translation key, based on a given element.

When saving an element on a multi-site Craft install, if $propagate is true for craft\services\Elements::saveElement(), then getTranslationKey() will be called for each custom field and for each site the element should be propagated to. If the method returns the same value as it did for the initial site, then the initial site’s value will be copied over to the target site.

public abstract string getTranslationKey ( craft\base\ElementInterface $element )
$element craft\base\ElementInterface The element being saved
return string The translation key

hasContentColumn() public abstract static method #

Returns whether this field has a column in the content table.

public abstract static boolean hasContentColumn ( )

isValueEmpty() public abstract method #

Returns whether the given value should be considered “empty” to a validator.

See also yii\validators\Validator::$isEmpty.

public abstract boolean isValueEmpty ( $value, craft\base\ElementInterface $element )
$value mixed The field’s value
$element craft\base\ElementInterface The element the field is associated with, if there is one
return boolean Whether the value should be considered “empty”

modifyElementsQuery() public abstract method #

Modifies an element query.

This method will be called whenever elements are being searched for that may have this field assigned to them. If the method returns false, the query will be stopped before it ever gets a chance to execute.

public abstract null, false modifyElementsQuery ( craft\elements\db\ElementQueryInterface $query, $value )
$query craft\elements\db\ElementQueryInterface The element query
$value mixed The value that was set on this field’s corresponding element query param, if any.
return null, false false in the event that the method is sure that no elements are going to be found.

normalizeValue() public abstract method #

Normalizes the field’s value for use.

This method is called when the field’s value is first accessed from the element. For example, the first time entry.myFieldHandle is called from a template, or right before getInputHtml() is called. Whatever this method returns is what entry.myFieldHandle will likewise return, and what getInputHtml()’s and serializeValue()’s $value arguments will be set to.

public abstract mixed normalizeValue ( $value, craft\base\ElementInterface $element null )
$value mixed The raw field value
$element craft\base\ElementInterface, null The element the field is associated with, if there is one
return mixed The prepared field value

serializeValue() public abstract method #

Prepares the field’s value to be stored somewhere, like the content table or JSON-encoded in an entry revision table.

Data types that are JSON-encodable are safe (arrays, integers, strings, booleans, etc). Whatever this returns should be something normalizeValue() can handle.

public abstract mixed serializeValue ( $value, craft\base\ElementInterface $element null )
$value mixed The raw field value
$element craft\base\ElementInterface, null The element the field is associated with, if there is one
return mixed The serialized field value

setIsFresh() public abstract method #

Sets whether the field is fresh.

public abstract void setIsFresh ( \craft\base\bool $isFresh null )
$isFresh boolean, null Whether the field is fresh.

supportedTranslationMethods() public abstract static method #

Returns which translation methods the field supports.

This method should return an array with at least one of the following values:

See also getTranslationKey().

public abstract static string[] supportedTranslationMethods ( )