1. Go to this page and download the library: Download micromus/kafka-bus-domain 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/ */
micromus / kafka-bus-domain example snippets
use Micromus\KafkaBusMessages\Data\Payload;
use Micromus\KafkaBusMessages\Data\Casters\PayloadCaster;
use Micromus\KafkaBusMessages\Data\Casters\CollectionCaster;
use Micromus\KafkaBusMessages\Data\Casters\IntegerCaster;
/**
* @property int $id
* @property string $name
* @property CategoryPayload $category
* @property AttributePayload[] $attributes
*/
class ProductMessage extends \Micromus\KafkaBusMessages\DomainMessage
{
public function getKey(): ?string
{
return (string) $this->id;
}
protected function definitionCasters(): array
{
return [
'id' => new IntegerCaster(),
'category' => new PayloadCaster(CategoryPayload::class),
'attributes' => new CollectionCaster(new PayloadCaster(AttributePayload::class)),
];
}
}
// Create from a raw array (e.g. decoded JSON)
$product = ProductMessage::from([
'id' => '42',
'name' => 'Laptop',
'category' => ['id' => 1, 'name' => 'Electronics'],
'attributes' => [
['id' => 10, 'name' => 'Color', 'value' => 'Silver'],
],
]);
echo $product->id; // int(42)
echo $product->category->name; // string("Electronics")
echo $product->attributes[0]->value; // string("Silver")
use Micromus\KafkaBusMessages\Data\Casters\DateTimeCaster;
use Micromus\KafkaBusMessages\Data\Casters\NullableCaster;
use Micromus\KafkaBusMessages\Data\Casters\FloatCaster;
protected function definitionCasters(): array
{
return [
'published_at' => new DateTimeCaster('Y-m-d\TH:i:s.uP'), // default format
'deleted_at' => new NullableCaster(new DateTimeCaster()),
'price' => new FloatCaster(),
];
}
use Micromus\KafkaBusMessages\JsonMessage;
$message = new JsonMessage([
'order_id' => 123,
'status' => 'shipped',
]);
// Produces: {"order_id":123,"status":"shipped"}
$message->toPayload();
use Micromus\KafkaBusMessages\DomainMessage;
use Micromus\KafkaBusMessages\DomainEventEnum;
$attributes = [
'id' => 42,
'name' => 'Laptop Pro',
'category' => ['id' => 1, 'name' => 'Electronics'],
'attributes' => [],
];
// create / update / delete
$message = new ProductMessage(
attributes: $attributes,
event: DomainEventEnum::Update,
dirty: ['name'],
);
// Produces JSON:
// {
// "event": "update",
// "attributes": { "id": 42, "name": "Laptop Pro", ... },
// "dirty": ["name"]
// }
$message->toPayload();
// The Kafka partition key comes from getKey() on the attributes object
$message->getKey(); // "42"
// Send to bus
$bus->publish($message);
use Micromus\KafkaBusMessages\Factories\DomainMessageFactory;
class ProductConsumer
{
#[MessageFactory(new DomainMessageFactory(ProductMessage::class))]
public function __invoke(ProductMessage $message)
{
echo $message->event->value; // "update"
echo $message->name; // "Laptop Pro"
}
}
use Micromus\KafkaBusMessages\Testing\DomainMessageTestFactory;
/**
* @extends DomainMessageTestFactory<ProductPayload>
*/
final class ProductTestFactory extends DomainMessageTestFactory
{
protected string $messageClass = ProductMessage::class;
public function definition(): array
{
return [
'id' => $this->faker->numberBetween(1, 9999),
'name' => $this->faker->sentence(),
'category' => CategoryPayloadTestFactory::new()->makeArray(),
'attributes' => [
AttributePayloadTestFactory::new()->makeArray(),
],
];
}
}
// Build a typed DomainMessage with default fake data
$message = ProductMessageTestFactory::new()->message();
// Override specific fields
$message = ProductMessageTestFactory::new()
->withEvent(DomainEventEnum::Delete)
->withDirty(['name', 'category'])
->message(['name' => 'Laptop Pro']);
// Build a raw RdKafka\Message for lower-level consumer tests
$rdKafkaMessage = ProductMessageTestFactory::new()->make();
// Build just the raw array
$array = ProductTestFactory::new()->makeArray();
use Micromus\KafkaBusMessages\Testing\PayloadTestFactory;
/**
* @extends PayloadTestFactory<CategoryPayload>
*/
final class CategoryPayloadTestFactory extends PayloadTestFactory
{
protected string $payloadClass = CategoryPayload::class;
public function definition(): array
{
return [
'id' => $this->faker->numberBetween(1, 9999),
'name' => $this->faker->word(),
];
}
}
$category = CategoryPayloadTestFactory::new()->payload();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.