<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
bogdankharchenko / typed-laravel-settings example snippets
composer
namespace App\Models\User;
use Illuminate\Database\Eloquent\Model;
use BogdanKharchenko\Settings\Models\HasSettings;
class User extends Model
{
use HasSettings;
}
use BogdanKharchenko\Settings\BaseSettings;
class UserSettings extends BaseSettings
{
public string $favoriteColor = 'red';
}
$user = User::first();
$user->setSettings(function(UserSettings $settings){
$settings->favoriteColor = 'blue';
});
// Updating Multiple Settings
$user->setSettings(function(UserSettings $settings, EmailPreferences $emailPreferences){
$settings->favoriteColor = 'blue';
$emailPreferences->marketing = false;
});
// Using the `setSettings()` Closure is a wrapper around the code example below.
$settings = new UserSettings($user);
$settings->favoriteColor = 'pink';
$settings->saveSettings();
class User extends Model
{
public function config(): UserSettings
{
return new UserSettings($this);
}
}
$user->config()->favoriteColor // returns blue
// Alternatively you can use docblocks to assist in typing
/** @var UserSettings $settings */
$settings = $user->getSettings(UserSettings::class);
$settings->favoriteColor // returns blue
use BogdanKharchenko\Settings\BaseSettings;
class UserSettings extends BaseSettings
{
protected array $encrypted = [
'secret',
'list',
];
public ?string $secret = null;
public array $list = [
'a',
'b',
'c',
];
}
class SimpleSettingWithRule extends BaseSettings
{
public string $favoriteColor = 'red';
// Optional
public function rules()
{
return [
'favoriteColor' => [' return [
'favoriteColor.in' => 'color does not match',
];
}
}