Pre-1.0. Not intended for public use yet. The API is subject to undocumented change, and these pages may already be wrong about it.

Skip to content

Activity Verbs ​

Introduction ​

A verb identifies the action recorded by an activity. You may use a string or an enum case.

For example, ->action('place', $order) records place. Define its headline in routes/feed.php. Use an enum to share verb values across your application.

Recording With Enums ​

Defining a Backed Enum ​

Define the verb values in a backed enum:

app/Enums/OrderActivity.php
php
<?php

namespace App\Enums;

enum OrderActivity: string
{
    case Placed = 'place';
    case Confirmed = 'confirm';
    case Ready = 'ready';
}

Defining Headlines for Enum Verbs ​

Pass the enum case to the verb method in routes/feed.php:

routes/feed.php
php
use App\Enums\OrderActivity;
use App\Models\Order;
use Storyfeed\Facades\Story;

Story::for(Order::class)
    ->verb(OrderActivity::Placed)
    ->headline(':actor placed :object with :target');

This defines a headline for the case's value, place, as ->verb('place') does.

Adding Fluent Recording ​

To publish directly from an enum case, implement the FeedVerb interface and use the AsFeedVerb trait:

app/Enums/OrderActivity.php
php
<?php

namespace App\Enums;

use Storyfeed\Concerns\AsFeedVerb;
use Storyfeed\Contracts\FeedVerb;

enum OrderActivity: string implements FeedVerb
{
    use AsFeedVerb;

    case Placed = 'place';
    case Confirmed = 'confirm';
    case Ready = 'ready';
}

You may now publish from the enum case. The record method on the Storyfeed facade also accepts an enum case as its verb argument, without requiring the trait:

php
use App\Enums\OrderActivity;

OrderActivity::Placed->by($request->user()) 
    ->object($order)
    ->to($shop)
    ->publish();
php
use App\Enums\OrderActivity;
use Storyfeed\Facades\Storyfeed;

Storyfeed::record(
    verb: OrderActivity::Placed, 
    object: $order,
    actor: $request->user(),
    target: $shop,
);

Using Storyfeed's Verbs ​

Storyfeed provides common verbs through the Storyfeed\Act enum. Define a headline for the verb before publishing:

routes/feed.php
php
use App\Models\Order;
use Storyfeed\Act;
use Storyfeed\Facades\Story;

Story::for(Order::class)->verb(Act::Confirm)
    ->headline(':actor confirmed :object');
php
use Storyfeed\Act;

Act::Confirm->by($request->user()) 
    ->object($order)
    ->publish();
php
use Storyfeed\Act;
use Storyfeed\Facades\Storyfeed;

Storyfeed::record(
    verb: Act::Confirm, 
    object: $order,
    actor: $request->user(),
);
SH

Storyfeed records the case's value, confirm. See Verb Vocabulary for the available verbs.

Released under the MIT License.