1. Go to this page and download the library: Download locastic/loggastic 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/ */
locastic / loggastic example snippets
namespace App\Entity;
use Locastic\Loggastic\Annotation\Loggable;
#[Loggable(groups: ['blog_post_log'])]
class BlogPost
{
// ...
}
namespace App\Entity;
use Locastic\Loggastic\Annotation\Loggable;
use Symfony\Component\Serializer\Annotation\Groups;
#[Loggable(groups: ['blog_post_log'])]
class BlogPost
{
private int $id;
#[Groups(groups: ['blog_post_log'])]
private string $title;
#[Groups(groups: ['blog_post_log'])]
private ArrayCollection $tags;
// ...
}
namespace App\Entity;
use Locastic\Loggastic\Annotation\Loggable;
use Symfony\Component\Serializer\Annotation\Groups;
class Tag
{
private int $id;
#[Groups(groups: ['blog_post_log'])]
private string $name;
#[Groups(groups: ['blog_post_log'])]
private DateTimeImmutable $createdAt;
// ...
}
public function getActivityLogsByClass(string $className, array $sort = []): array;
public function getActivityLogsByClassAndId(string $className, $objectId, array $sort = []): array;
public function getActivityLogsByIndexAndId(string $index, $objectId, array $sort = []): array;
#[ApiResource(
operations: [
new Get(provider: ItemProvider::class),
new GetCollection(provider: CollectionProvider::class),
],
order: ["loggedAt" => "DESC"],
stateOptions: new Options(index: '*_activity_log'),
)]
class ActivityLog extends BaseActivityLog
{
#[ApiProperty(identifier: true)]
protected ?string $id = null;
}
namespace App\MessageDispatcher;
use App\Entity\Product;
use Locastic\Loggastic\Message\ActivityLogMessageInterface;
use Locastic\Loggastic\MessageDispatcher\ActivityLogMessageDispatcherInterface;
use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
#[AsDecorator(ActivityLogMessageDispatcherInterface::class)]
class ActivityLogMessageDispatcher implements ActivityLogMessageDispatcherInterface
{
public function __construct(private readonly ActivityLogMessageDispatcherInterface $decorated)
{
}
public function dispatch(ActivityLogMessageInterface $activityLogMessage, ?string $transportName = null): void
{
if ($activityLogMessage->getClassName() === Product::class) {
$this->decorated->dispatch($activityLogMessage, 'activity_logs_product');
return;
}
$this->decorated->dispatch($activityLogMessage, $transportName);
}
}
namespace App\Entity;
use Locastic\Loggastic\Loggable\LoggableChildInterface;
class ProductVariant implements LoggableChildInterface
{
private Product $product;
public function getProduct(): Product
{
return $this->product;
}
public function logTo(): ?object
{
return $this->getProduct();
}
// ...
}
namespace App\Service;
class SomeService
{
public function __construct(private readonly ActivityLoggerInterface $activityLogger)
{
}
public function logItem($item): void
{
$this->activityLogger->logCreatedItem($item, 'custom_action_name');
$this->activityLogger->logDeletedItem($item->getId(), get_class($item), 'custom_action_name');
$this->activityLogger->logUpdatedItem($item, 'custom_action_name');
}
}