fields

object

%field

/phlo/resources/fields/field.phlo

Base ORM field

Every field type extends this one and is made with field(type: 'x'), which resolves to the resource field_x; anything else you pass becomes a property, so title, required, length, pattern and enum need no declaration. Override input() for the form and label() for the list, and let objColumns name the columns the field owns, so a field that stores nothing returns an empty array.

fieldorm
function

function field ($type, ...$args):field

line 11
Maakt een veld met een opgegeven type en aanvullende argumenten, waarbij de phlo-functie wordt gebruikt om een unieke identificatie voor het veld te genereren.
phlo("field_$type", ...$args, type: $type)
static

field :: __handle

line 13
Deze eigenschap wordt gebruikt om toegang te krijgen tot de interne handle van een veldobject in Phlo.
null
prop

%field -> title:string

line 15
Deze expressie haalt de 'name' eigenschap van het huidige object op en kapitaliseert de eerste letter.
ucfirst($this->name)
method

%field -> input ($record):string

line 17
Genereert een invoerveld op basis van het opgegeven type, naam en waarde uit het opgegeven record, met optionele attributen voor maxlength en placeholder.
input(type: $this->type, name: $this->name, value: $record->{$this->name} ?? $this->default, maxlength: $this->length, placeholder: $this->placeholder, class: 'field')
method

%field -> label ($record)

line 18
Haal het label van een veld op uit het opgegeven record met behulp van de naam van het veld.
$record->{$this->name};
prop

%field -> objColumns:array

line 20
Deze eigenschap haalt de kolommen van het opgegeven obj op in de context van een veld.
[]
method

%field -> objValidate ($value):?string

line 22
Valideert de gegeven waarde tegen specifieke regels zoals verplicht, lengte, patroon en enumeratiebeperkingen, en retourneert foutmeldingen als de validatie mislukt.
if (($value === null || $value === void) && $this->required) return $this->title.' is required'
if ($value === null || $value === void) return null
if ($this->length && is_string($value) && mb_strlen($value) > $this->length) return $this->title.' is too long (max '.$this->length.')'
if ($this->pattern && is_string($value) && !preg_match('/'.str_replace('/', '\\/', $this->pattern).'/', $value)) return $this->title.' has invalid format'
if ($this->enum && !in_array($value, (array)$this->enum, true)) return $this->title.' must be one of: '.implode(', ', (array)$this->enum)
return null
object

%field_bool

/phlo/resources/fields/bool.phlo

Boolean field

Stores 1 or 0 and never null, so a checkbox that is left alone still saves a value. Set true and false to change the two symbols a list shows.

fieldbooleaninput
prop

%field_bool -> true

line 12
Stelt een boolean-veld voor met een waar waarde, weergegeven als een vinkje-symbool '✅'.
'✅'
prop

%field_bool -> false

line 13
Stelt een boolean-veld voor met een standaardwaarde van false, weergegeven als '❌'.
'❌'
method

%field_bool -> label ($record):string

line 15
Geeft het label terug dat overeenkomt met een boolean veld in het gegeven record, waarbij het waar-label of het onwaar-label wordt geretourneerd op basis van de waarde van het veld.
$record->{$this->name} ? $this->true : $this->false
method

%field_bool -> input ($record):string

line 16
Genereert een checkbox invoerveld voor een boolean waarde, met een label en een slider voor visuele verbetering, gebaseerd op de waarde van het opgegeven record.
tag('label', inner: input(type: 'checkbox', name: $this->name, value: 1, checked: $record->{$this->name} ? true : null).tag('span', class: 'slider', inner: void))
method

%field_bool -> parse ($record):int

line 17
$record->{$this->name} = %payload->{$this->name} ? 1 : 0
method

%field_bool -> nullable:bool

line 18
Deze functie converteert een boolean veld naar een nullable type, waardoor het waar, onwaar of null waarden kan vertegenwoordigen.
false
prop

%field_bool -> objColumns:array

line 20
Toegang tot de kolom die is gekoppeld aan het boolean-veld in de objectcontext.
[$this->name]
object

%field_child

/phlo/resources/fields/child.phlo

Child relation field

The mirror of a parent field elsewhere: it reads the records that point back at this one and owns no column itself. It cannot be edited here, only followed, so change a child from its own record. Set key when the foreign key is not named after the parent model.

fieldrelationchild
prop

%field_child -> list

line 12
Toegang tot de 'count' eigenschap van het field_child object binnen de lijst.
'count'
prop

%field_child -> change

line 13
De field_child->$change-eigenschap geeft aan of het kindveld enige wijzigingen heeft ondergaan, waarbij een boolean waarde van false betekent dat er geen wijzigingen zijn opgetreden.
false
prop

%field_child -> create

line 14
Deze expressie evalueert naar false, wat aangeeft dat de field_child eigenschap de create-operatie niet ondersteunt.
false
prop

%field_child -> record

line 15
Toegang tot het kindrecord van het huidige veld in een lijst.
'list'
method

%field_child -> count ($record):string

line 17
Telt het aantal kindrecords dat aan een gegeven record is gekoppeld en retourneert de telling.
tag('a', href: slash.($record::$uriRecord ?? $record::class).slash.$record->{$record::idColumn()}.slash.$this->name, class: 'async', inner: $record->getCount($this->name).space.$this->title)
method

%field_child -> last ($record)

line 18
Haal de laatste waarde van het opgegeven veld uit het gegeven record.
$record->getLast($this->name)
method

%field_child -> label ($record):string

line 19
Haal het label op voor een kindveld uit een gegeven record, en retourneer een streepje als er geen label wordt gevonden.
implode(loop($record->{$this->name}, fn($child) => $this->link($child))) ?: dash
method

%field_child -> input ($record):string

line 20
Genereert een invoerveld dat is gekoppeld aan een specifiek record, waarbij de labelmethode wordt gebruikt om het bijbehorende label weer te geven.
$this->label($record)
method
line 21
Genereert een link naar een specifiek record met behulp van de URI en ID, en maakt een anker-tag met de klasse 'async'.
tag('a', href: slash.($record::$uriRecord ?? $record::class).slash.$record->{$record::idColumn()}, class: 'async', inner: $record)
method

%field_child -> objKey ($parentModel):string

line 23
Geeft de waarde van de key-eigenschap terug als deze bestaat; anders retourneert het de $parentModel.
$this->key ?? $parentModel
method

%field_child -> objOwns ($record, $parentId, $parentModel):bool

line 25
Does $record belong to parent $parentId via this relation? (direct foreign key).
$value = $record->{$this->objKey($parentModel)};
is_object($value) && $value = $value->{$value::idColumn()};
return (string)$value === (string)$parentId
object

%field_date

/phlo/resources/fields/date.phlo

Date field

Renders in the reader's language through IntlDateFormatter, so a Dutch visitor sees a Dutch date without any work. Without the intl extension it falls back to a built-in Dutch and English month list, so any other language reads as English there. Set format to a date() pattern when the notation has to be fixed rather than local.

fielddate
prop

%field_date -> handle

line 12
Deze expressie haalt de handle op die is gekoppeld aan het field_date-object en retourneert true als deze bestaat.
true
prop

%field_date -> format

line 13
Formatteert een datumveld volgens de opgegeven opmaakstring.
null
prop

%field_date -> months:array

line 14
Dit item biedt een associatieve array die maandnummers koppelt aan hun overeenkomstige namen in het Engels en het Nederlands.
[
	'nl' => [1 => 'januari', 2 => 'februari', 3 => 'maart', 4 => 'april', 5 => 'mei', 6 => 'juni', 7 => 'juli', 8 => 'augustus', 9 => 'september', 10 => 'oktober', 11 => 'november', 12 => 'december'],
	'en' => [1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April', 5 => 'May', 6 => 'June', 7 => 'July', 8 => 'August', 9 => 'September', 10 => 'October', 11 => 'November', 12 => 'December'],
]
method

%field_date -> label ($record):string

line 19
Formatteert een datetitel uit een gegeven record en retourneert een geformatteerde string op basis van het opgegeven formaat of standaard naar een lokale weergave.
$v = $record->{$this->name};
if ($v === null || $v === void) return dash
$ts = is_numeric($v) ? (int)$v : strtotime($v)
if (!$ts) return esc($v)
if ($this->format) return date($this->format, $ts)
$lang = substr((string)(%app->lang ?? 'en'), 0, 2)
if (class_exists('IntlDateFormatter')) return (new \IntlDateFormatter($lang, \IntlDateFormatter::LONG, \IntlDateFormatter::NONE))->format($ts)
return date('j', $ts).space.(($this->months[$lang] ?? $this->months['en'])[(int)date('n', $ts)]).space.date('Y', $ts)
prop

%field_date -> objColumns:array

line 30
Toegang tot het datumveld van de opgegeven objectkolommen met behulp van de naam eigenschap.
[$this->name]
object

%field_datetime

/phlo/resources/fields/datetime.phlo

Date-time field

Stores a unix timestamp rather than a formatted string, and shows an age icon that runs blue under an hour, yellow under a day and red beyond. Fields called created and changed are kept out of the form because the model writes those itself.

fielddatetime
prop

%field_datetime -> handle

line 12
De field_datetime->$handle expressie wordt gebruikt om de handle van een datetime-veld in Phlo te benaderen.
true
prop

%field_datetime -> change

line 13
Dit item controleert of de veldnaam niet 'created' of 'changed' is voordat een wijziging aan het datetime-veld wordt toegestaan.
!in_array($this->name, ['created', 'changed'])
prop

%field_datetime -> create

line 14
Controleert of de veldnaam niet 'created' of 'changed' is.
!in_array($this->name, ['created', 'changed'])
method

%field_datetime -> label ($record):string

line 16
Genereert een label voor een datetime-veld in een record, met een pictogram en een leesbaar tijdformaat als er een waarde bestaat.
($value = $record->{$this->name}) ? tag('i', class: 'icon clock-'.$this->labelIconClass(time() - $value), inner: void).tag('span', data_ts: $record->{$this->name}, inner: time_human($record->{$this->name})) : dash
method

%field_datetime -> labelIconClass ($value):string

line 17
Geeft een kleurklasse terug op basis van de waarde van tijd in seconden, waarbij het wordt gecategoriseerd als 'rood' voor meer dan een dag, 'geel' voor meer dan een uur en 'blauw' voor minder.
$value > 86400 ? 'red' : ($value > 3600 ? 'yellow' : 'blue')
method

%field_datetime -> input ($record):string

line 18
Genereert een invoerveld van het type 'datetime-local' voor een opgegeven recordeigenschap, zodat gebruikers een datum en tijd kunnen selecteren.
input(type: 'datetime-local', name: $this->name, value: $record->{$this->name} ? date('Y-m-d\TH:i', $record->{$this->name}) : void, class: 'field')
method

%field_datetime -> parse ($record):void

line 19
Parst een datetime-veld uit een record, waarbij 'created' wordt ingesteld op de huidige tijd als het nog niet is ingesteld, 'changed' wordt bijgewerkt naar de huidige tijd, of een payloadwaarde wordt omgezet naar een tijdstempel als deze bestaat.
if ($this->name === 'created') $record->created ??= time()
elseif ($this->name === 'changed') $record->{$this->name} = time()
elseif ($payload = %payload->{$this->name}) $record->{$this->name} = strtotime($payload)
prop

%field_datetime -> objColumns:array

line 25
Toegang tot de kolom die is gekoppeld aan het field_datetime-object, waarbij de naam wordt geretourneerd.
[$this->name]
object

%field_email

/phlo/resources/fields/email.phlo

Email field

Only changes how a stored address is shown, as a mailto link. It validates nothing, so add pattern or required when the address has to be real.

fieldemail
view

%field_email -> label ($record)

line 13
Deze view genereert een mailto-link voor een e-mailadres dat in het record is opgeslagen, zodat gebruikers kunnen klikken en direct een e-mail kunnen verzenden.
<a href="mailto:{{ $record->{$this->name} }}">{{ $record->{$this->name} }}</a>
object

%field_file

/phlo/resources/fields/file.phlo

File field

An upload is stored under a random token instead of its own name, so two people can send the same filename and no visitor can guess a neighbouring URL. That takes two columns, name and name_token, which objColumns already claims. Set accept to narrow the picker, and path and uri when the files live somewhere other than the default. On disk the extension is lowercase whatever the upload said, so a route that lowercases it as well finds FOTO.JPG under token.jpg.

fieldfileupload
prop

%field_file -> canDelete

line 12
De `field_file->$canDelete` eigenschap geeft aan of het bestand kan worden verwijderd.
true
prop

%field_file -> delete

line 13
Vraagt de gebruiker om bevestiging voordat een bestand wordt verwijderd.
'Delete file?'
prop

%field_file -> path

line 14
De `field_file->$path` haalt het bestandspad op dat is gekoppeld aan een specifiek bestandsveld in de context van een resource.
files
prop

%field_file -> uri

line 15
Deze eigenschap retourneert de URI voor een bestand dat is opgeslagen in de '/files/' directory.
'/files/'
prop

%field_file -> length

line 16
De `$length` eigenschap van `field_file` retourneert de grootte van het bestand in bytes.
100
prop

%field_file -> accept

line 17
Bepaalt de geaccepteerde bestandstypen voor een bestandsinvoerveld in een formulier.
null
method

%field_file -> label ($record):string

line 19
($filename = $record->{$this->name}) ? tag('a', href: $this->uri.$record->{$this->name.'_token'}.slash.rawurlencode($filename), target: 'file', inner: tag('i', class: 'icon '.$this->ext($filename), inner: void).esc($filename)) : dash
method

%field_file -> input ($record):string

line 20
$input = void
$file = ($filename = $record->{$this->name}) ? $this->read($record) : null
$input .= lf.tab.tag('div', class: 'file', inner: $file ? tag('i', class: 'icon '.$this->ext($filename), inner: void).esc($filename) : '-select-')
$input .= lf.tab.input(type: 'file', class: 'file-input', name: $this->name, accept: $this->accept)
$file && $this->canDelete && $input .= lf.tab.tag('div', inner: tag('label', inner: input(type: 'checkbox', name: $this->name.'Delete')." $this->delete"))
return $input.lf
method

%field_file -> parse ($record):void

line 29
Parst een bestand uit de payload, behandelt verwijdering en schrijft het bestand als het geldig is, en werkt het record bij met de verkorte naam en token van het bestand.
$file = %payload->{$this->name};
if ($delete = %payload->{$this->name.'Delete'}) unset(%payload->{$this->name.'Delete'})
if ($record->{$this->name} && $delete && $this->canDelete) $record->{$this->name} = $record->{$this->name.'_token'} = null
if (is_a($file, 'file')){
	$token = $file->token
	if (!$this->write($file)) return
	$record->{$this->name} = $file->shortenTo($this->length)
	$record->{$this->name.'_token'} = $token
}
method

%field_file -> read ($record, $path = null):file

line 41
$filename = $record->{$this->name};
$token = $record->{$this->name.'_token'};
return %file(($path ?? $this->path).($info = substr($token, 0, 2).slash.substr($token, 2).dot.$this->ext($filename)), name: $filename, info: $info)
method

%field_file -> write ($file)

line 47
Schrijft het opgegeven bestand naar het aangewezen pad, verplaatst het indien nodig, en activeert een fout als de schrijfoperatie mislukt.
file_exists($dest = $this->writePath($file)) || $file->move($dest) || error("Couldn't write: $dest")
method

%field_file -> writePath ($file, $path = null):string

line 48
$token = $file->token
$path = ($path ?? $this->path).substr($token, 0, 2)
is_dir($path) || mkdir($path) || error("Couldn't create: $path")
return $path.slash.substr($token, 2).dot.$this->ext($file->name)
method

%field_file -> ext (string $filename):string

line 55
strtolower(pathinfo($filename, PATHINFO_EXTENSION))
prop

%field_file -> objColumns:array

line 57
Deze eigenschap haalt een array op met de naam van het veld en de bijbehorende token voor de opgegeven objectkolommen.
[$this->name, $this->name.'_token']
view

script

line 59
Dit script beheert de interacties met bestandsinvoer door een klik op de bestandsinvoer te activeren wanneer het bijbehorende label wordt aangeklikt en de labeltekst bij te werken met de geselecteerde bestandsnaam bij het selecteren van een bestand.
on('click', '.input.file .file', file => file.nextElementSibling.click())
on('change', '.input.file .file-input', input => input.previousElementSibling.innerText = input.files[0].name)
object

%field_image

/phlo/resources/fields/image.phlo

Image field

A file field that also writes a thumbnail, and the browser scales the picture down before it is sent, so a phone photo does not travel at full size. thumbSize is the thumbnail edge in pixels; a list shows the thumbnail and a record shows the full image.

fieldimageupload
prop

%field_image -> delete

line 12
Geeft de gebruiker een bevestigingsbericht met de vraag of ze de afbeelding willen verwijderen.
'Delete image?'
prop

%field_image -> uri

line 13
Deze expressie haalt de URI van een afbeeldingsveld op door het basispad '/images/' aan de waarde van het veld toe te voegen.
'/images/'
prop

%field_image -> path

line 14
De `field_image->$path` geeft het pad van de afbeelding in de `field_image` resource weer.
images
prop

%field_image -> thumbPath

line 15
Het `thumbPath`-veld in het `field_image`-object haalt het pad op naar de miniatuurafbeelding die is opgeslagen in de `thumbs`-resource.
thumbs
prop

%field_image -> thumbSize

line 16
De `field_image->$thumbSize` eigenschap definieert de grootte van de miniatuurafbeelding voor een gegeven veld in Phlo.
64
prop

%field_image -> thumbUri

line 17
Deze prop genereert een thumbnail-URI door '/thumbs/' toe te voegen aan de waarde van field_image.
'/thumbs/'
prop

%field_image -> placeholder

line 18
Geeft een base64-gecodeerde SVG-placeholderafbeelding terug voor gebruik in views.
'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM4ODgiIHN0cm9rZS13aWR0aD0iMS40Ij48cmVjdCB4PSIzIiB5PSIzIiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHJ4PSIyIi8+PGNpcmNsZSBjeD0iOC41IiBjeT0iOC41IiByPSIxLjYiLz48cGF0aCBkPSJNMjEgMTVsLTUtNUw1IDIxIi8+PC9zdmc+'
prop

%field_image -> record

line 20
Toegang tot het 'preview' veld van het huidige record in een field_image context.
'preview'
method

%field_image -> label ($record):string

line 22
Genereert een HTML-ankertag met een afbeelding, die linkt naar een opgegeven URI op basis van de verstrekte recordgegevens. Als het record geen bestandsnaam bevat, retourneert het een streepje.
($filename = $record->{$this->name}) ? tag('a', href: $this->uri.($url = $record->{$this->name.'_token'}.slash.rawurlencode($filename)), target: 'image', inner: tag('img', src: $this->thumbUri.$url)) : dash
method

%field_image -> preview ($record):string

line 23
Genereert een voorbeeldafbeelding link voor een opgegeven record, waarbij de bestandsnaam en token uit het record worden gebruikt om de URL te construeren.
($filename = $record->{$this->name}) ? tag('a', href: $this->uri.($url = $record->{$this->name.'_token'}.slash.rawurlencode($filename)), target: 'image', inner: tag('img', src: $this->uri.$url, class: 'preview')) : dash
method

%field_image -> input ($record):string

line 24
Genereert een HTML-invoerelement voor het uploaden van een afbeelding, samen met een voorbeeld van de huidige afbeelding indien beschikbaar, en een optionele checkbox voor het verwijderen van de afbeelding.
$input = void
$file = $record->{$this->name} ? $this->read($record, $this->thumbPath) : null
$input .= lf.tab.tag('img', src: $file ? $this->thumbUri.$record->{$this->name.'_token'}.slash.rawurlencode($record->{$this->name}) : $this->placeholder, class: 'image')
$input .= lf.tab.input(type: 'file', class: 'image-input',  name: $this->name, accept: 'image/*', data_size: $this->thumbSize)
$file && $this->canDelete && $input .= lf.tab.tag('div', inner: tag('label', inner: input(type: 'checkbox', name: $this->name.'Delete')." $this->delete"))
return $input.lf
method

%field_image -> write ($file)

line 33
Schrijft een afbeeldingsbestand naar een opgegeven pad en verplaatst het originele bestand naar een andere locatie, terwijl de afbeelding ook wordt geschaald naar een gedefinieerde thumbnailgrootte.
%img($file->file)->scale($this->thumbSize, $this->thumbSize)->save($this->writePath($file, $this->thumbPath)) && $file->move($this->writePath($file))
prop

%field_image -> objColumns:array

line 35
Deze expressie haalt de kolommen op die zijn gekoppeld aan het field_image, specifiek de kolomnamen die zijn gedefinieerd door de naam van het object en de tokenvariant.
[$this->name, $this->name.'_token']
view

script

line 37
Dit script behandelt klikgebeurtenissen op afbeeldingelementen om een bestandinvoer te activeren en verwerkt afbeeldinguploads door de geselecteerde afbeelding te verkleinen voordat de bron van het vorige sibling-element wordt bijgewerkt.
on('click', '.input.image .image', img => img.nextElementSibling.click())
on('change', '.input.image .image-input', input => imageResizer(input.files[0], input.dataset.size, input.dataset.size, image => input.previousElementSibling.src = image))
object

%field_many

/phlo/resources/fields/many.phlo

Many-to-many relation field

Editing is opt-in: a model that sets create/change on a many field gets the checkbox picker from input(); CMS.API::syncMany() then rewrites the pivot table on save.

fieldrelationmany
prop

%field_many -> list

line 12
De field_many->$list eigenschap wordt gebruikt om een lijst van labels voor een veld in een Phlo-applicatie te definiëren.
'label'
prop

%field_many -> record

line 13
Toegang tot het 'label' veld van elk record in een verzameling records.
'label'
prop

%field_many -> create

line 14
Maakt meerdere instanties van een veld in een resource.
false
prop

%field_many -> change

line 15
De field_many->$change-eigenschap geeft aan of er wijzigingen zijn opgetreden in de waarde van het veld.
false
method

%field_many -> count ($record):int

line 17
Geeft het aantal records terug dat is gekoppeld aan de opgegeven veldnaam in het gegeven record.
$record->getCount($this->name)
method

%field_many -> label ($record):string

line 18
Genereert een label voor elk item in een many-to-many-relatie vanuit het gegeven record, met koppelingen naar de gerelateerde entiteiten.
loop($record->{$this->name}, fn($relation) => $this->link($relation), lf) ?: dash
method
line 19
Maakt een link naar een specifiek record met behulp van de URI en ID, en rendert het als een anker-tag met de klasse 'async'.
tag('a', href: slash.($record::$uriRecord ?? $record::class).slash.$record->{$record::idColumn()}, class: 'async', inner: $record)
method

%field_many -> input ($record):string

line 21
Genereert een set checkbox-invoervelden voor een many-to-many-relatie op basis van het opgegeven record, waarmee meerdere selecties mogelijk zijn.
$pk = $this->obj::idColumn()
$current = array_keys($record->{$this->name} ?: [])
$boxes = loop($this->obj::records(), fn($o) => tag('label', tag('input', type: 'checkbox', name: $this->name.'[]', value: $o->$pk, checked: in_array($o->$pk, $current) ? true : null).esc((string)$o), class: 'ms-opt'), void)
return tag('div', $boxes ?: tag('span', 'no options', class: 'muted'), class: 'ms-grid')
method

%field_many -> sync ($model, $parentId)

line 28
Synchroniseert een many-to-many-relatie door bestaande vermeldingen voor een gegeven ouder-ID te verwijderen en nieuwe vermeldingen te maken op basis van de verstrekte payload.
$rel = $model::objMany()[$this->name]
$ids = array_values(array_unique(array_filter((array)(%payload->{$this->name} ?? []), fn($id) => (string)$id !== '')))
$db = $model::DB()
$db->delete($rel['table'], $rel['localKey'].'=?', $parentId)
foreach ($ids AS $id) $db->create($rel['table'], ...[$rel['localKey'] => $parentId, $rel['foreignKey'] => $id])
method

%field_many -> objOwns ($record, $parentId, $parentModel):bool

line 36
Controleert of een record eigendom is van een opgegeven bovenliggend model door de database te raadplegen voor een relatie die in het bovenliggende model is gedefinieerd.
$rel = $parentModel::objMany()[$this->name]
return (bool)$parentModel::DB()->record($rel['table'], ...[$rel['localKey'] => $parentId, $rel['foreignKey'] => $record->{$record::idColumn()}])
prop

%field_many -> objColumns:array

line 41
De property field_many->$objColumns bevat een array van kolomobjecten die zijn gekoppeld aan een many-to-many relatie in een Phlo resource.
[]
object

%field_multiselect

/phlo/resources/fields/multiselect.phlo

Multi-select via checkboxes; stores the choice as CSV in one hidden field (no save change needed).

Joins the checked boxes into one comma separated column, so it needs no pivot table and no extra save logic. Reach for many instead when the choices are records with a life of their own.

fieldselectmulti
method

%field_multiselect -> label ($record):string

line 12
Genereert een label voor een multi-select veld op basis van het opgegeven record, waarbij de geselecteerde waarden worden gefilterd en opgemaakt in tags.
$values = array_filter(array_map('trim', explode(comma, (string)($record->{$this->name} ?? void))))
return $values ? loop($values, fn($v) => tag('span', esc($v), class: 'ms-tag'), space) : dash
method

%field_multiselect -> input ($record):string

line 17
Genereert een multi-select invoerveld met selectievakjes op basis van de gegeven opties, waarmee gebruikers meerdere waarden uit een lijst kunnen selecteren.
$current = array_filter(array_map('trim', explode(comma, (string)($record->{$this->name} ?? void))))
$js = "var f=this.closest('.field');f.querySelector('input.msv').value=[...f.querySelectorAll('input.msc:checked')].map(c=>c.value).join(',')"
$boxes = loop((array)$this->options, fn($o) => tag('label', tag('input', type: 'checkbox', value: (string)$o, class: 'msc', checked: in_array((string)$o, $current) ? true : null, onchange: $js).esc((string)$o), class: 'ms-opt'), void)
return tag('input', type: 'hidden', name: $this->name, value: implode(comma, $current), class: 'msv').tag('div', $boxes ?: tag('span', 'no options', class: 'muted'), class: 'ms-grid')
prop

%field_multiselect -> objColumns:array

line 24
Dit haalt de waarde op van het veld dat wordt geïdentificeerd door de naam eigenschap vanuit de huidige objectcontext.
[$this->name]
object

%field_number

/phlo/resources/fields/number.phlo

Number field

decimals sets both the step of the input and the formatting of the list. min is 0 out of the box, so state it yourself when negative values are allowed.

fieldnumber
prop

%field_number -> decimals

line 12
De `field_number->$decimals` eigenschap specificeert het aantal decimalen voor een numeriek veld in Phlo.
prop

%field_number -> length

line 13
Dit definieert de lengte-eigenschap van een field_number, die het maximale aantal toegestane cijfers specificeert.
5
prop

%field_number -> min

line 14
Deze prop definieert de minimale waarde voor een getalveld in een view.
method

%field_number -> label ($record):string

line 16
($value = $record->{$this->name}) === null || $value === void ? dash : number_format($value, $this->decimals, comma, dot)
method

%field_number -> input ($record):string

line 17
Genereert een HTML-invoerelement van het type 'number' met gespecificeerde attributen, waaronder naam, waarde, stap en min, met gegevens uit het opgegeven record.
input(type: 'number', name: $this->name, value: $record->{$this->name} ?? $this->default, step: $this->decimals ? dot.str_repeat('0', $this->decimals - 1).'1' : null, min: $this->min, class: 'field')
method

%field_number -> parse ($record):void

line 19
$name = $this->name
if (!%payload->hasData($name)) return
$value = %payload->$name
$record->$name = ($value === null || (is_string($value) && trim($value) === void)) ? ($this->default ?? 0) : $value
prop

%field_number -> objColumns:array

line 26
Toegang tot de kolomgegevens die zijn gekoppeld aan het veld dat wordt weergegeven door de huidige objectinstantie met behulp van de naam.
[$this->name]
object

%field_parent

/phlo/resources/fields/parent.phlo

Parent relation field

Points at another model through obj and offers every record of it in one select, so keep it to sets a person can still scroll. Reading the field gives you the record itself, not the id.

fieldrelationparent
method

%field_parent -> label ($record):string

line 12
Geeft het label van het bovenliggende veld voor een gegeven record terug, met een link naar het model indien van toepassing, anders retourneert het een streepje.
is_a($obj = $record->{$this->name}, 'model') ? $this->link($obj) : dash
method

%field_parent -> input ($record):string

line 13
Genereert een HTML <select> invoerelement dat is gevuld met opties op basis van het opgegeven $record, waarbij de optie als geselecteerd wordt gemarkeerd als deze overeenkomt met de ID van het record.
select(name: $this->name, inner: loop($this->options, fn($parent) => '<option'.($parent->id === $record->{$this->name}?->id ? ' selected' : void).' value="'.$parent->id.'">'.$parent, void))
method
line 14
Genereert een anker (`<a>`) HTML-element dat linkt naar de URI van een specifiek record, met gebruik van de ID van het record en optionele interne inhoud.
tag('a', href: slash.($record::$uriRecord ?? $record::class).slash.$record->id, class: 'async', inner: $content ?? $record)
prop

%field_parent -> options:array

line 15
Toegang tot de opties die zijn gekoppeld aan het bovenliggende veld in de context van de huidige objectrecords.
$this->obj::records()
prop

%field_parent -> objColumns:array

line 17
Toegang tot de kolommen van het bovenliggende object in de context van het huidige veld.
[$this->name]
object

%field_password

/phlo/resources/fields/password.phlo

Password field

Never gives the stored value back: a list prints dots and an empty form field leaves the current password untouched. It hashes with bcrypt on save, so keep the plain value nowhere.

fieldpassword
prop

%field_password -> list

line 12
De field_password->$list expressie wordt gebruikt om toegang te krijgen tot een lijst van wachtwoordvelden in een Phlo-applicatie, en retourneert false als er geen dergelijke velden bestaan.
false
prop

%field_password -> required

line 13
Geeft aan of het wachtwoordveld verplicht is voor het indienen van het formulier, waarbij een waarde van true aangeeft dat het verplicht is.
true
prop

%field_password -> minlength

line 14
Stelt de minimale lengte-eis in voor het wachtwoordveld.
8
prop

%field_password -> placeholder

line 15
Stelt de placeholdertekst voor het wachtwoordinvoerveld in op 'New password'.
'New password'
method

%field_password -> input ($record):string

line 17
Genereert een invoerveld voor een wachtwoord met gespecificeerde attributen zoals type, naam, placeholder en klasse.
input(type: $this->type, name: $this->name, placeholder: $this->placeholder, class: 'field')
method

%field_password -> label ($record):string

line 18
Genereert een label voor een wachtwoordveld op basis van het opgegeven record.
'••••••••'
method

%field_password -> parse ($record)

line 19
($password = trim((string)%payload->{$this->name})) && $record->{$this->name} = password_hash($password, PASSWORD_BCRYPT)
prop

%field_password -> objColumns:array

line 21
Toegang tot het wachtwoordveld van de objColumns-array met de naam van het huidige object als sleutel.
[$this->name]
object

%field_price

/phlo/resources/fields/price.phlo

Price field

A number field fixed at two decimals. Store the amount in the unit you bill in and leave the formatting to the field.

fieldpricemoney
prop

%field_price -> decimals

line 12
Deze eigenschap definieert het aantal decimalen voor het prijsveld.
2
object

%field_select

/phlo/resources/fields/select.phlo

Select field

Stores the chosen option itself rather than a key, so renaming an option later leaves older records pointing at wording you no longer offer. Pass the accepted values as options.

fieldselect
method

%field_select -> input ($record):string

line 12
Genereert een select-invoerveld met opties op basis van het opgegeven $record, waarbij de huidige optie als geselecteerd wordt gemarkeerd als deze overeenkomt met de waarde in $record.
select(name: $this->name, inner: loop($this->options, fn($option) => "<option".($record->{$this->name} === $option ? ' selected' : void).">$option", void))
prop

%field_select -> objColumns:array

line 14
Toegang tot de kolomgegevens die zijn gekoppeld aan de naam van het huidige object in de context van een veldselectie.
[$this->name]
object

%field_text

/phlo/resources/fields/text.phlo

Text field

length is both the limit and the choice of input: over 250 characters the field renders a textarea instead of a single line.

fieldtext
prop

%field_text -> length

line 12
De field_text->$length eigenschap retourneert de lengte van de tekst in het veld als een geheel getal.
100
prop

%field_text -> multiline:bool

line 13
De field_text->$multiline eigenschap bepaalt of het tekstveld meerdere regels invoer toestaat op basis van de voorwaarde dat de lengte meer dan 250 tekens bedraagt.
$this->length > 250
method

%field_text -> label ($record):string

line 15
($value = $record->{$this->name}) === null ? dash : strtr(esc(strlen($value) > 100 ? substr($value, 0, 80).'...' : $value), [lf => br])
method

%field_text -> input ($record):string

line 16
Genereert een invoerveld voor tekstinvoer, waarbij op basis van de multiline-eigenschap of een meerregelig of een enkelregelig invoerveld wordt gebruikt.
$this->multiline ? $this->inputMulti($record) : $this->inputField($record)
method

%field_text -> inputField ($record):string

line 17
Genereert een invoerveld voor een formulier, met de opgegeven type, naam, waarde, maxlength, placeholder en class-attributen.
input(type: $this->type, name: $this->name, value: ($value = $record->{$this->name}) ? esc($value) : $this->default, maxlength: $this->length, placeholder: $this->placeholder, class: 'field')
method

%field_text -> inputMulti ($record):string

line 18
Genereert een meerregelige tekstinvoerveld met behulp van een textarea-element, waarbij het wordt vooraf ingevuld met een waarde uit het opgegeven record of een standaardwaarde als deze niet bestaat.
textarea(name: $this->name, inner: ($value = $record->{$this->name}) ? esc($value) : $this->default ?? void, placeholder: $this->placeholder, class: 'field')
prop

%field_text -> objColumns:array

line 20
Toegang tot de kolomgegevens die zijn gekoppeld aan de naam van het veld in het object.
[$this->name]
object

%field_token

/phlo/resources/fields/token.phlo

Token field

Fills itself with a random token when a record is made and refuses to change afterwards, which makes it the id to use for anything that ends up in a URL. handle is true, so a record can be looked up by this column instead of by its id.

fieldtoken
prop

%field_token -> length

line 12
Geeft de lengte van de field_token terug als een geheel getal.
8
prop

%field_token -> default:string

line 13
Genereert een standaardtoken van een opgegeven lengte met behulp van de token-functie.
token($this->length)
prop

%field_token -> create

line 14
Maakt een nieuw veldtoken aan in de context van een resource en retourneert false als de operatie mislukt.
false
prop

%field_token -> change

line 15
De field_token->$change expressie evalueert naar false, wat aangeeft dat er geen wijziging is in de field token.
false
prop

%field_token -> search

line 16
De expressie field_token->$search evalueert naar true, wat aangeeft dat de zoekfunctionaliteit is ingeschakeld voor de veldtoken.
true
prop

%field_token -> handle

line 17
Deze expressie haalt de waarde van de 'handle'-eigenschap op uit het 'field_token'-object en retourneert true als deze bestaat.
true
method

%field_token -> label ($record):string

line 19
Deze functie haalt het label voor een veldtoken op uit een gegeven record en wikkelt het in een 'div'-tag, waarbij speciale tekens worden ontsnapt.
tag('div', inner: esc($record->{$this->name}))
method

%field_token -> parse ($record)

line 20
Parst een veldtoken uit het gegeven record en wijst een standaardwaarde toe als het token niet aanwezig is.
$record->{$this->name} ??= $this->default
prop

%field_token -> objColumns:array

line 22
Toegang tot de kolomgegevens die zijn gekoppeld aan de veldtoken in de huidige objectcontext.
[$this->name]
object

%field_virtual

/phlo/resources/fields/virtual.phlo

Virtual field

Owns no column and is never saved, so use it to show something derived next to the real fields. The record supplies the value through a prop or method of the same name.

fieldvirtual
prop

%field_virtual -> create

line 12
Deze eigenschap geeft aan of het veld virtueel is en dynamisch moet worden aangemaakt.
false
prop

%field_virtual -> change

line 13
De field_virtual->$change eigenschap geeft aan of het virtuele veld is veranderd ten opzichte van de vorige waarde.
false
prop

%field_virtual -> objColumns:array

line 15
De field_virtual->$objColumns eigenschap wordt gebruikt om de kolommen van een virtueel veld in een object te benaderen.
[]
object

%field_wysiwyg

/phlo/resources/fields/wysiwyg.phlo

WYSIWYG field

Stores whatever HTML the editor produces, including anything a user pasted in, so clean or escape it before it reaches a public page.

fieldwysiwygeditor
method

%field_wysiwyg -> input ($record):string

line 12
Genereert een WYSIWYG-editorinvoerveld, inclusief een werkbalk voor tekstopmaak en een verborgen invoer om de waarde op te slaan.
$value = $record->{$this->name} ?? $this->default ?? void
$toolbar = tag('div', class: 'toolbar', inner: tag('button', type: 'button', data_command: 'bold', inner: '<b>B</b>').tag('button', type: 'button', data_command: 'italic', inner: '<i>I</i>').tag('button', type: 'button', data_command: 'underline', inner: '<u>U</u>').tag('button', type: 'button', data_command: 'insertUnorderedList', inner: '•').tag('button', type: 'button', data_command: 'insertOrderedList', inner: '1.'))
$editor = tag('div', class: 'editor', contenteditable: 'true', inner: $value)
$hiddenInput = textarea(name: $this->name, class: 'hidden-value', inner: $value)
return tag('div', class: 'wysiwyg-container', inner: "$toolbar$editor$hiddenInput")
prop

%field_wysiwyg -> objColumns:array

line 20
Toegang tot de kolommen van het WYSIWYG-veld als een object, waarmee de datastructuur van het veld kan worden gemanipuleerd.
[$this->name]
view

script

line 22
Dit script activeert een WYSIWYG-editor door knoppenklikken te verwerken om opdrachten uit te voeren en een verborgen textarea bij te werken met de HTML-inhoud van de editor bij invoergebeurtenissen.
on('click', '.wysiwyg-container .toolbar button', (button, e) => {
	e.preventDefault()
	const command = button.dataset.command
	document.execCommand(command, false, null)
})

on('input', '.wysiwyg-container .editor', editor => {
	const container = editor.closest('.wysiwyg-container')
	const hiddenInput = container.querySelector('textarea.hidden-value')
	hiddenInput.value = editor.innerHTML
})
on('click', '.wysiwyg-container .editor a', a => window.open(a.href))

Functions

function

field($type, ...$args):field

/phlo/resources/fields/field.phlo line 11

Base ORM field

Every field type extends this one and is made with field(type: 'x'), which resolves to the resource field_x; anything else you pass becomes a property, so title, required, length, pattern and enum need no declaration. Override input() for the form and label() for the list, and let objColumns name the columns the field owns, so a field that stores nothing returns an empty array.

fieldorm
Maakt een veld met een opgegeven type en aanvullende argumenten, waarbij de phlo-functie wordt gebruikt om een unieke identificatie voor het veld te genereren.
phlo("field_$type", ...$args, type: $type)

Laatst bijgewerkt op 23-08-2026

We gebruiken essentiële cookies om deze site te laten werken. Met uw toestemming gebruiken we ook analytics om de site te verbeteren.