1. Go to this page and download the library: Download storyblok/symfony-bundle 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/ */
storyblok / symfony-bundle example snippets
namespace App\Webhook;
use Storyblok\Bundle\Webhook\Event;
use Storyblok\Bundle\Webhook\Handler\WebhookHandlerInterface;
final class PurgeVarnishHandler implements WebhookHandlerInterface
{
public function handle(Event $event, array $payload): void
{
// Your custom logic for handling the event
// Example: purging Varnish cache
}
public function supports(Event $event): bool
{
// Specify the events your handler supports
return $event->equalsOneOf([
Event::StoryPublished,
Event::StoryUnpublished,
Event::StoryDeleted,
Event::StoryMoved,
]);
}
public static function priority(): int
{
// Define the priority for your handler
return -2000;
}
}
// ...
use Storyblok\Bundle\ContentType\ContentType;
final readonly class Page extends ContentType
{
public string $uuid;
public string $title;
private \DateTimeImmutable $publishedAt;
public function __construct(array $values)
{
$this->uuid = $values['uuid'];
$this->title = $values['content']['title'];
$this->publishedAt = new \DateTimeImmutable($values['published_at']);
}
public function publishedAt(): \DateTimeImmutable
{
return $this->publishedAt;
}
}
// ...
use App\ContentType\Page\Page;
use Storyblok\Bundle\ContentType\Attribute\AsContentTypeController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
#[AsContentTypeController(contentType: Page::class)]
final readonly class DefaultPageController
{
public function __invoke(Request $request, Page $page): Response
{
return new Response('I am on page ' . $page->title . ' with locale ' . $request->getLocale());
}
}
// ...
use App\ContentType\Page\Page;
use Storyblok\Bundle\ContentType\Attribute\AsContentTypeController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
#[AsContentTypeController(contentType: Page::class, slug: 'legal/imprint')]
final readonly class ImprintController
{
public function __invoke(Request $request): Response
{
return new Response('I am on the legal page with locale ' . $request->getLocale());
}
}
// ...
use App\ContentType\Page\Page;
use Storyblok\Bundle\ContentType\Attribute\AsContentTypeController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Attribute\Cache;
#[AsContentTypeController(contentType: Page::class)]
#[Cache(
maxage: 9000,
public: true,
smaxage: 9000,
mustRevalidate: false
)]
final readonly class SpecialController
{
public function __invoke(): Response
{
// ...
}
}
use Storyblok\Bundle\Block\Attribute\AsBlock;
use Webmozart\Assert\Assert;
#[AsBlock(name: 'sample', template: 'custom_blocks/sample.html.twig')]
final readonly class SampleBlock
{
public string $title;
public string $description;
public function __construct(array $values)
{
Assert::keyExists($values, 'title');
$this->title = $values['title'];
Assert::keyExists($values, 'description');
$this->description = $values['description'];
}
}