1. Go to this page and download the library: Download grifart/scaffolder 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/ */
grifart / scaffolder example snippets
use Grifart\ClassScaffolder\Capabilities;
use function Grifart\ClassScaffolder\Definition\definitionOf;
use Grifart\ClassScaffolder\Definition\Types;
return [
definitionOf(Article::class, withFields: [
'id' => 'int',
'title' => 'string',
'content' => 'string',
'tags' => Types\listOf('string'),
])
->withField('archivedAt', Types\nullable(\DateTime::class))
->with(
Capabilities\constructorWithPromotedProperties(),
Capabilities\getters(),
)
];
/**
* Do not edit. This is generated file. Modify definition file instead.
*/
declare(strict_types=1);
final class Article
{
/**
* @param string[] $tags
*/
public function __construct(
private int $id,
private string $title,
private string $content,
private array $tags,
private ?\DateTime $archivedAt,
) {
}
public function getId(): int
{
return $this->id;
}
public function getTitle(): string
{
return $this->title;
}
public function getContent(): string
{
return $this->content;
}
/**
* @return string[]
*/
public function getTags(): array
{
return $this->tags;
}
public function getArchivedAt(): ?\DateTime
{
return $this->archivedAt;
}
}
final class FooEvent
{
private function __construct(private string $field)
{
}
public static function occurred(string $field): self
{
return new self($field);
}
}
final class Foo
{
public function __construct(private string $field)
{
}
public function withField(string $field): self
{
$self = clone $this;
$self->field = $field;
return $self;
}
}
/**
* Do not edit. This is generated file. Modify definition file instead.
*/
declare(strict_types=1);
final class Name
{
public function __construct(
private string $firstName,
private string $lastName,
) {
}
public function getFirstName(): string{
return $this->firstName;
}
public function getLastName(): string{
return $this->lastName;
}
}
#[\Grifart\ClassScaffolder\Preserve]
public function getFullName(): string
{
return $this->firstName . ' ' . $this->lastName;
}
use Grifart\ClassScaffolder\Capabilities\Capability;
use Grifart\ClassScaffolder\ClassInNamespace;
use Grifart\ClassScaffolder\Definition\ClassDefinition;
final class GetFullNameMethod implements Capability
{
public function applyTo(
ClassDefinition $definition, // lets you access the list of defined fields
ClassInNamespace $draft, // this is the prescription of the newly generated class
?ClassInNamespace $current, // this describes the original class if it already exists
): void
{
$draft->getClassType()->addMethod('getFullName')
->setReturnType('string')
->addBody('return $this->firstName . " " . $this->lastName;');
}
}
> ->with(new class implements Capability {
> function applyTo() { /* the transformation */ }
> });
>
use Grifart\ClassScaffolder\Capabilities;
use Grifart\ClassScaffolder\Definition\ClassDefinition;
use function Grifart\ClassScaffolder\Definition\definitionOf;
function valueObject(string $className): ClassDefinition
{
return definitionOf($className)
->with(Capabilities\constructorWithPromotedProperties())
->with(Capabilities\getters());
}