Telegraph Entities Storage
Telegraph offers a quick, multi driver, data storage solution to save and retrieve information about Bots, Chats and Users. A fine grained configuration is available in the storage section of Telegraph configuration file
Storages Available
Telegraph implements, by default, contextual storage for Bots, Chats and User DTOs. Additionally, a storage can be added to every class, it is only needed to implement the \DefStudio\Telegraph\Contracts\Storable contract and use the \DefStudio\Telegraph\Concerns\HasStorage trait:
class MyCustomClass implements \DefStudio\Telegraph\Contracts\Storable { use \DefStudio\Telegraph\Concerns\HasStorage; public function storageKey(): string|int { return "MyCustomClass instance unique ID"; } }
Bot Storage
TelegraphBots data storage is available through its ->storage() method
/** @var \DefStudio\Telegraph\Models\TelegraphBot $telegraphBot */ $telegraphBot->storage()->set('last_chat', '1254824'); $lastChatId = $telegraphBot->storage()->get('last_chat'); // 1254824 $telegraphBot->forget('last_chat') //stored data is deleted
Chat Storage
TelegraphChats data storage is available through its ->storage() method
/** @var \DefStudio\Telegraph\Models\TelegraphChat $telegraphChat */ $telegraphChat->storage()->set('last_message', 'hello!'); $lastMessage = $telegraphChat->storage()->get('last_message'); // 1254824 $lastMessage->forget('last_message') //stored data is deleted
User DTO Storage
User DTO data storage is available through its ->storage() method
/** @var \App\Models\User $user */ /** @var \DefStudio\Telegraph\DTO\User $telegraphUser */ $telegraphUser->storage()->set('laravel_user_id', $user->id); $userId = $telegraphUser->storage()->get('laravel_user_id'); // 99 $userId->forget('laravel_user_id') //stored data is deleted
Using different Storage drivers
Depending on the application needs, multiple drivers can be configured and used.
Default driver
A default storage driver can be set in telegraph.storage.default config and it will be used when ->storage() is invoked without arguments:
// /config/telegraph.php return [ // ... 'storage' => [ 'default' => 'file' ] ]
$telegraphUser->storage() // \DefStudio\Telegraph\Storage\FileStorageDriver
File Storage Driver
A file storage driver saves data in json files inside the disk/folder defined in Telegraph configuration file
// /config/telegraph.php return [ // ... 'storage' => [ 'stores' => [ 'file' => [ 'driver' => \DefStudio\Telegraph\Storage\FileStorageDriver::class, 'disk' => 'local', 'root' => 'telegraph', ] ] ] ]
with the above configuration this code will store the name
value in a /[laravel local disk path]/telegraph/User/<telegraph_user_id>.json file
$telegraphUser->storage('file')->put('name', 'Daniele');
If the storage file is missing, empty, or contains invalid JSON, the file driver treats it as an empty storage bag and overwrites it with valid JSON on the next write.
Cache Storage Driver
A cache storage driver saves data using Laravel Cache system following Telegraph configuration file
// /config/telegraph.php return [ // ... 'storage' => [ 'stores' => [ 'cache' => [ 'driver' => \DefStudio\Telegraph\Storage\CacheStorageDriver::class, 'store' => 'redis', 'key_prefix' => 'tgph', ] ] ] ]
with the above configuration this code will store the name
value inside Laravel Redis Cache
$telegraphUser->storage('cache')->put('name', 'Daniele');
Storing models
Telegraph can store model references as well: when a model is found inside data stored, it is internally converted in a class/id pair and the model is retrieved from DB when the value is fetched:
/** @var \DefStudio\Telegraph\DTO\User $telegraphUser */ $systemUser = \App\Models\User::where('username', $telegraphUser->username()); $telegraphUser->storage()->set('system_data.user', $systemUser); $telegraphUser->storage()->get('system_data.user') // will return an Instance of \App\Models\User