1. Go to this page and download the library: Download indexnowkit/doctrine 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/ */
indexnowkit / doctrine example snippets
use Doctrine\DBAL\DriverManager;
use Doctrine\ORM\{EntityManager, ORMSetup};
use IndexNowKit\{Config, IndexNowKit};
use IndexNowKit\Doctrine\IndexNowDoctrine;
use IndexNowKit\Url\{ArrayResolverLocator, AttributeUrlResolver};
$indexNow = IndexNowKit::create(Config::fromEnv(), logger: $logger);
$resolver = new AttributeUrlResolver(
$indexNow->attributes,
$indexNow->extractor, // the DSL alone: Doctrine entities are plain objects
router: null, // no framework router: see "Routes" below
locator: new ArrayResolverLocator([
'post_url' => fn (Post $post): string => '/posts/' . $post->slug, // #[IndexNow(resolver: 'post_url')]
]),
logger: $logger,
);
$wiring = new IndexNowDoctrine($indexNow, $resolver, $logger, autoFlush: true);
$ormConfiguration = ORMSetup::createAttributeMetadataConfiguration([__DIR__ . '/src/Entity'], isDevMode: false);
$wiring->registerMiddleware($ormConfiguration); // BEFORE DriverManager::getConnection()
$connection = DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => __DIR__ . '/var/app.db'], $ormConfiguration);
$entityManager = new EntityManager($connection, $ormConfiguration);
$wiring->registerListener($entityManager);
$listener = new IndexNowListener(
fn(): ObjectChangeHandler => $services->changes(), // built on the first flush that has something to classify
null,
$staging,
$logger,
sink: fn(array $urls) => $services->kit()->collect($urls),
);
use IndexNowKit\Attribute\{IndexNow, IndexNowDefaults};
#[ORM\Entity]
#[IndexNowDefaults(when: 'isPublished', fields: ['slug', 'title', 'body', 'published'])]
#[IndexNow(resolver: 'post_url')]
#[IndexNow(via: 'category')] // a changed post also refreshes its category page
#[IndexNow(urls: ['/'])] // and the homepage
class Post
{
#[ORM\Column]
private bool $published = false;
public function isPublished(): bool { return $this->published; }
}
use Doctrine\ORM\Mapping as ORM;
use IndexNowKit\Attribute\{IndexNow, IndexNowDefaults};
#[ORM\Entity]
#[IndexNowDefaults(when: 'isPublished')]
#[IndexNow(route: 'post_show', params: ['slug' => 'slug'])] // a Symfony route, or resolver: 'post_url' without a router
class Post { /* ORM columns, isPublished() */ }
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.