PHP code example of coder-at-heart / object-models
1. Go to this page and download the library: Download coder-at-heart/object-models library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
coder-at-heart / object-models example snippets
namespace CoderAtHeart\ObjectModel\Tests\Models;
use Carbon\Carbon;
use CoderAtHeart\ObjectModel\ObjectModel;
use CoderAtHeart\ObjectModel\Property;
/**
* @property string name
* @property int age
* @property string email
* @property Address home
* @property Address business
* @property Phone[] phone_numbers
* @property Carbon birthday
* @property Carbon alarm
* @property bool subscribed
* @property array friends
* @property Carbon[] important_dates
*/
class Person extends ObjectModel
{
public static function properties(): array
{
return [
Property::string('name')->
namespace CoderAtHeart\ObjectModel\Tests\Models;
use CoderAtHeart\ObjectModel\ObjectModel;
use CoderAtHeart\ObjectModel\Property;
use CoderAtHeart\ObjectModel\Tests\ENUMs\Country;
/**
* @property string address_1
* @property string address_2
* @property string city
* @property string postcode
* @property Country country_code
*/
class Address extends ObjectModel
{
public static function properties(): array
{
return [
Property::string('address_1'),
Property::string('address_2'),
Property::string('city'),
Property::enum('country_code', Country::class)->default(Country::GB)->
namespace CoderAtHeart\ObjectModel\Tests\ENUMs;
enum Country : string
{
case US = 'us';
case GB = 'gb';
}
namespace CoderAtHeart\ObjectModel\Tests\Models;
use CoderAtHeart\ObjectModel\ObjectModel;
use CoderAtHeart\ObjectModel\Property;
/**
* @property string label
* @property string number
*/
class Phone extends ObjectModel
{
public static function properties(): array
{
return [
Property::string('label'),
Property::string('number'),
];
}
}
// Create from an array of data
$person = Person::createFrom(array:[
'name' => 'Coder At Heart',
'age' => 30,
'email' => '[email protected]',
'home' => [
'address_1' => 'Some Street',
'address_2' => 'Some Area',
'city' => 'Some City',
'postcode' => 'AB12 3CD',
],
'business' => [
'address_1' => 'Some Business',
'address_2' => 'Some Location',
'city' => 'Some City',
'postcode' => 'AB99 9DC',
],
'phone_numbers' => [
[
'label' => 'home',
'number' => '01234 67890'
],
[
'label' => 'mobile',
'number' => '09999 123456'
],
],
'birthday' => '1990-01-01'
'important_dates' => [
'2011-01-01 01:01:01',
'2012-02-02 02:02:02',
'2013-03-03 03:03:03',
'2014-04-06 04:04:04',
'2015-05-06 05:05:05',
]
]);
echo $person->name;
// the return value is the underlying object. in this case
// a Carbon Object
echo $person->birthday->format('js F Y');
// Access deep objects
echo $person->home->address_1;
echo $person->phone_numbers[1]->number;
// Save this to json
$json = $person->toJson();
// Create a new person
$bob = Person::createFrom(json: $json)
$bob->name = 'Bob';
// Convert the person to an array
$array = $bob->toArray();
$fred= Person::createFrom(array: $bob)
$fred->name = 'Fred';
$fred->age = 25;
// Just like a normal object:
$isabel = new Person();
$isabel->name = 'Isabel';
$isabel->age = 35;
$isabel->birthday = new Carbon("2002-11-23");
use CoderAtHeart\ObjectModel\ArrayModel;
$numbers = ArrayModel::create(objectModel: Phone::class);
// Create a new phone number
$homePhone = new Phone();
$homePhone->label = 'home';
$homePhone->number = '01234 567890';
$numbers[] = $homePhone;
echo $numbers[0]->number;
// add to it like a normal array
$numbers[] = [
'label' => 'business',
'number' => '01234 567890',
];
// Access it like an object
echo $numbers[1]->label;
namespace App\Casts;
use App\ObjectModels\Person;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
class PersonCast implements CastsAttributes
{
public function get($model, string $key, $value, array $attributes)
{
return Person::create(json: $value);
}
public function set($model, string $key, $value, array $attributes)
{
return $value->toJson();
}
}
namespace App\Casts;
use App\ObjectModels\PhonesNumbers;
use CoderAtHeart\ObjectModel\ArrayModel;use CoderAtHeart\ObjectModel\Tests\Models\Person;use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
class LogCast implements CastsAttributes
{
public function get($model, string $key, $value, array $attributes)
{
return PhonesNumbers::create(json: $value);
// or
return ArrayModel::create(json: $value, objectModel: Phone::class);
}
public function set($model, string $key, $value, array $attributes)
{
return $value->toJson();
}
}
use CoderAtHeart\ObjectModel\Property;
/**
* @property string label
* @property string number
*/
class CustomProperties extends Property
{
/**
* zipCode
*
* @param string $name
*
* @return static
*/
public static function zipCode(string $name): Property
{
return self::property($name)
->addRule('numeric|min:5')
// jsonCallback will be called when teh object is converted to json
->jsonCallback(function ($value) {
return str_replace(' ', '', $value);
})
// This callback is called when the value is set
->setCallback(function ($value) {
return (string) $value;
})
->set(null);
}
}
use CoderAtHeart\ObjectModel\ObjectModel;
use CoderAtHeart\ObjectModel\CustomProperties;
/**
* @property string address_1
* @property string address_2
* @property string city
* @property string zip
*/
class Address extends ObjectModel
{
public static function properties(): array
{
return [
CustomProperties::string('address_1'),
CustomProperties::string('address_2'),
CustomProperties::string('city'),
CustomProperties::zipCode('zip'),
];
}
}
$validation = $person->validate();
// $validation is an ObjectModel
echo $validation->valid;
// or
echo $validation->isValid();
// the name of the object / array
echo $validation->name;
// the errors
dd($validation->errros);
class Person extends ObjectModel
{
public static function properties(): array
{
return [
Property::string('name')->irst_name')->addRule(new Rule()), // custom rules
];
}
}
use \CoderAtHeart\ObjectModel\Traits\IgnoreUndefinedProperties;
class Person extends ObjectModel
{
use IgnoreUndefinedProperties;
public static function properties(): array
{
return [
Property::string('name')->
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.