Value

Introduction

The value service is a powerful class that determines the value of a target based on a predictable procedure of processing.

While you may not use this service on your own much it's important to understand as it's used heavily in the Streams Platform specifically where UI is concerned.

Valuation is used heavily in the build process for UI builders.{.tip}

Basic Usage

To get started you will need to include the \Anomaly\Streams\Platform\Support\Value class in your code.

make

The make method makes a compiled value from the parameters and entry provided. By default the entry uses the term entry in the valuation process but can be changed. You can also define additional payload should the view layer be used in valuation.

$value = app(Anomaly\Streams\Platform\Support\Template::class);

$value-make($parameters, $entry, $term = 'entry', $payload = [])
$value = app(Anomaly\Streams\Platform\Support\Template::class);

echo $value->make('name', $entry);
// Ryan Thompson
$value = app(Anomaly\Streams\Platform\Support\Template::class);

$value = [
    'wrapper'     => '
            <strong>{value.file}</strong>
            <br>
            <small class="text-muted">{value.disk}://{value.folder}/{value.file}</small>
            <br>
            <span>{value.size} {value.keywords}</span>',
    'value'       => [
        'file'     => 'entry.name',
        'folder'   => 'entry.folder.slug',
        'keywords' => 'entry.keywords.labels|join',
        'disk'     => 'entry.folder.disk.slug',
        'size'     => 'entry.size_label',
    ],
];

echo $value->make($value, compact('entry'));

Examples

Views

You can define the view parameter to let the view engine handle the output. The entry is passed to the view as well as any additional payload.

$value = app(Anomaly\Streams\Platform\Support\Template::class);

$value = [
    'view' => 'theme::example/view',
];

echo $value->make($value, compact('entry'));

Templates

The template parameter is similar to the view wrapper but uses the entry and not the value definition.

$value = app(Anomaly\Streams\Platform\Support\Template::class);

$value = [
    'template'     => '
            <strong>{entry.name}</strong>
            <br>
            <small class="text-muted">{entry.folder.disk.slug}://{entry.folder.slug}/{entry.name}</small>
            <br>
            <span>{entry.size_label}</span>',
];

echo $value->make($value, compact('entry'));

Field Values

The simplest way to define a value is by the field slug.

$value = app(Anomaly\Streams\Platform\Support\Template::class);

echo $value->make('name', compact('entry'));
// Kal-El

If the field slug is a relation - the related entry's title column will be related.

$value = app(Anomaly\Streams\Platform\Support\Template::class);

echo $value->make('parent', compact('entry'));
// Jor-El

Data Mapping

The main reason to use valuation in the first place is to map potentially complex data to simple string definitions by leveraging the object's structure itself.

To get started with mapping you will always prefix the data map with {term}.*. For these examples we will assume entry is our term.

Relations

You can walk collection methods and relationships.

$value = app(Anomaly\Streams\Platform\Support\Template::class);

echo $value->make('entry.parents.first.name', compact('entry'));
// Jor-El

Presenters

The below example uses the email field type's presenter.

$value = app(Anomaly\Streams\Platform\Support\Template::class);

echo $value->make('entry.email.mailto', compact('entry'));
// <a href="mailto:[email protected]">[email protected]</a>

Closures

You can use closures for the value and leverage the passed entry to define complex or conditional values.

$value = app(Anomaly\Streams\Platform\Support\Template::class);

$value = [
    'value' => function($entry) {
        return $entry->name;
    }
];

echo $value->make($value, compact('entry'));

Safe HTML

By default all output is sanitized using the purifier. To skip sanitation define the html as safe.

$value = app(Anomaly\Streams\Platform\Support\Template::class);

$value = [
    // ...
    'is_safe' => true,
];

echo $value->make($value, compact('entry'));