Configuration
Below is a list of available configuration with default values:
"example" => [
"type" => "anomaly.field_type.multiple",
"config" => [
"min" => null,
"max" => null,
"related" => null,
"mode" => "lookup",
"key_name" => null,
"title_name" => null,
"value_table" => null,
"selected_table" => null,
"lookup_table" => null,
"handler" => "\Anomaly\MultipleFieldType\Handler\Related@handle"
]
]
Configuration
Key | Example | Description |
---|---|---|
min |
1 |
The minimum selections allowed. |
max |
10 |
The maxium selections allowed. |
related |
|
The related model or stream dot notation ( |
mode |
tags |
The input mode. Valid options are |
key_name |
slug |
The name of the key field. Default is |
title_name |
name |
The name of the title field. Default is the |
value_table |
|
The builder for the value table. |
selected_table |
|
The builder for the selections table. |
lookup_table |
|
The builder for the lookup table. |
handler |
|
The options handler. |
Option Handlers
Option handlers are responsible for setting the available options on the field type. You can define your own option handler to add your own logic to available options.
You can define custom handlers as a callable string where @handle will be assumed if no method is provided:
"handler" => \App\Example\MyOptions::class // Assumes @handle
Option handlers can also be a handler with a closure:
"example" => [
"config" => [
"handler" => function (MultipleFieldType $fieldType, ExampleRepositoryInterface $entries) {
$fieldType->setOptions($entries->getCustomEntries()->pluck('title', 'id')->all());
}
]
]
Closures can not be stored in the database, so your closure type handlers must be set / overridden from the form builder.{.note}
Writing Option Handlers
Writing custom option handlers is easy. To begin, create a class with the method you defined in the config option.
"handler" => "App/Example/MyOptions@handle"
The handler string is called via Laravel's service container. The MultipleFieldType $fieldType
is passed as an argument.
Handlers are called through Laravel's service container, so method and class injection is supported.{.tip}
<?php namespace App/Example;
class MyOptions
{
public function handle(MultipleFieldType $fieldType, ExampleRepositoryInterface $entries) {
$fieldType->setOptions(
$entries->getCustomEntries()->pluck('title', 'id')->all()
);
}
}
Hooks
This section will introduce you to the hooks registered by this addon and how to use them.
EntryModel::newMultipleFieldTypeLookupTableBuilder()
The new_multiple_field_type_lookup_table_builder
hook binding returns an instance of the lookup table builder.
This hook let's you override the table builder for the lookup UI.
Returns: \Anomaly\MultipleFieldType\Table\LookupTableBuilder
Example
public function newMultipleFieldTypeLookupTableBuilder() {
return app(\App\Example\MyLookupTable::class);
}
Automatically detected lookup tables
Lookup tables that are picked up automatically do not require you to define the hook method on your related model.
The lookup table builder location format is:
{\Your\Related\Model\Namespace}\Support\MultipleFieldType\LookupTableBuilder;
Consider the example in the Pages module:
\Anomaly\PagesModule\Page\PageModel
\Anomaly\PagesModule\Page\Support\MultipleFieldType\LookupTableBuilder
Writing Lookup Table Builders
Writing custom option handlers is easy. Simply create your class and extend the base lookup table builder:
<?php namespace App\Example;
class LookupTableBuilder extends \Anomaly\MultipleFieldType\Table\LookupTableBuilder
{
protected $filters = [
'title',
];
protected $columns = [
'title',
'path',
];
}
If you are not relying on automatic detection
then all you need to do next is define the hook method on your related model:
public function newMultipleFieldTypeLookupTableBuilder() {
return app(\App\Example\LookupTableBuilder::class);
}
EntryModel::newMultipleFieldTypeValueTableBuilder()
The new_multiple_field_type_value_table_builder
hook binding returns an instance of the value table builder.
This hook let's you override the table builder for the value UI.
Returns: \Anomaly\MultipleFieldType\Table\ValueTableBuilder
Example
public function newMultipleFieldTypeValueTableBuilder() {
return app(\App\Example\MyValueTable::class);
}
Automatically detected value tables
Value tables that are picked up automatically do not require you to define the hook method on your related model.
The value table builder location format is:
{\Your\Related\Model\Namespace}\Support\MultipleFieldType\ValueTableBuilder;
Consider the example in the Pages module:
\Anomaly\PagesModule\Page\PageModel
\Anomaly\PagesModule\Page\Support\MultipleFieldType\ValueTableBuilder
Writing Value Tables Builders
Writing custom value tables is easy. Simply create your class and extend the base value table builder:
<?php namespace App\Example;
class ValueTableBuilder extends \Anomaly\MultipleFieldType\Table\ValueTableBuilder
{
protected $filters = [
'title',
];
protected $columns = [
'title',
'path',
];
}
If you are not relying on automatic detection
then all you need to do next is define the hook method on your related model:
public function newMultipleFieldTypeValueTableBuilder() {
return app(\App\Example\ValueTableBuilder::class);
}
EntryModel::newMultipleFieldTypeSelectedTableBuilder()
The new_multiple_field_type_selected_table_builder
hook binding returns an instance of the selected table builder.
This hook let's you override the table builder for the selected options UI.
Returns: \Anomaly\MultipleFieldType\Table\SelectedTableBuilder
Example
public function newMultipleFieldTypeSelectedTableBuilder() {
return app(\App\Example\MySelectedTable::class);
}
Automatically detected selected tables
Selected tables that are picked up automatically do not require you to define the hook method on your related model.
The selected table builder location format is:
{\Your\Related\Model\Namespace}\Support\MultipleFieldType\SelectedTableBuilder;
Consider the example in the Pages module:
\Anomaly\PagesModule\Page\PageModel
\Anomaly\PagesModule\Page\Support\MultipleFieldType\SelectedTableBuilder
Writing Selected Tables Builders
Writing custom selected tables is easy. Simply create your class and extend the base selected table builder:
<?php namespace App\Example;
class SelectedTableBuilder extends \Anomaly\MultipleFieldType\Table\SelectedTableBuilder
{
protected $filters = [
'title',
];
protected $columns = [
'title',
'path',
];
}
If you are not relying on automatic detection
then all you need to do next is define the hook method on your related model:
public function newMultipleFieldTypeSelectedTableBuilder() {
return app(\App\Example\SelectedTableBuilder::class);
}