1. Go to this page and download the library: Download bfg/transformer 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/ */
bfg / transformer example snippets
use Bfg\Transformer\Transformer;
...
class UserTransformer extends Transformer
{
/**
* If your data that you received from
* a third-party source have an Identifier,
* then you need to specify this field.
* @var string|null
*/
protected ?string $remoteId = "ID";
/**
* An alternative source indicate the model
* if it is not sent to the transformer.
* @var string|null
*/
protected ?string $modelClass = User::class;
/**
* Mapping to send data generation into the model.
* @var string[]
*/
protected array $toModel = [
'FullName' => 'name',
'Email' => 'email',
// or if you identical key names:
'name',
'email',
// for related iteration
ContactsTransformer::class // The transformer of contacts
=> 'contacts', // The relation name in the model
];
/**
* Mapping for the direction of data generation
* from the model, back to third-party service.
* @var string[]
*/
protected array $fromModel = [
'name' => ['FirstName', 'LastName'],
'address' => 'Address',
'email' => 'Email',
'phone' => 'Phone',
];
/**
* To implement the data unloading mechanism
* on third-party service.
* @return void
*/
public function upload()
{
}
}
use Bfg\Transformer\Transformer;
...
class UserTransformer extends Transformer
{
...
protected array $toModel = [
'FullName' => 'name',
'Email' => 'email',
];
protected array $fromModel = [
'name' => ['FirstName', 'LastName'],
'email' => 'Email',
];
protected function toNameAttribute($dataValue)
{
$this->data; // All data is available on this property.
$this->model; // The model is available on this property.
return $dataValue;
}
protected function fromNameAttribute($modelValue)
{
return $modelValue;
}
protected function forFirstNameDataAttribute($modelValue)
{
return $modelValue;
}
protected function forLastNameDataAttribute($modelValue)
{
return $modelValue;
}
protected function forEmailDataAttribute($modelValue)
{
return $modelValue;
}
}
...
protected $casts = [
'views' => 'int'
];
...
use Bfg\Transformer\Transformer;
use App\Models\User;
...
class UserTransformer extends Transformer
{
...
protected function getModel()
{
return User::where('remote_id', $this->data['ID'])->first()
?: parent::getModel();
}
}
use Bfg\Transformer\Transformer;
use App\Models\User;
...
/**
* @property-read ApiService $api For example some "ApiService" class
*/
class UserTransformer extends Transformer
{
...
protected function getData()
{
return $this->api->findUser($this->model->remote_id);
}
}
use App\Transformers\UserTransformer;
...
$data = [
'userName' => 'Thomas',
'userEmail' => '[email protected]',
]; // for example, any data
$model = UserTransformer::make()
->withData($data)
->toModel(); // Instance of User model
// Or from any model
$model = UserTransformer::make()
->withData($data)
->withModel(User::find(1))
->toModel(); // With my instance of User model
$model->save();
use App\Models\User;
use App\Transformers\UserTransformer;
...
$model = User::find(1);
$data = UserTransformer::make()->withModel($model)->toData()->data;
// => ['userName' => 'Thomas','userEmail' => '[email protected]']
// Or with you data filling
$fillData = (object) ['userName' => null, 'userEmail' => null, 'otherData' => 'test']
UserTransformer::make()->withModel($model)->withData($fillData)->toData()->upload();
use App\Transformers\TransformerCollection;
...
/** @var TransformerCollection $collection */
$collection->save();
use App\Transformers\TransformerCollection;
...
/** @var TransformerCollection $collection */
$collection->transaction()->save();
// For additional updating
$collection->transaction()->save()->update([
'api_updated_at' => now()
]);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.