Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Symfony Bundle Laravel Package

indexnowkit/symfony-bundle

IndexNowKit for Symfony lets your app instantly submit URLs to search engines like Bing and Yandex via the IndexNow protocol. Configure your API key and trigger submissions from services, console commands, or events to speed up indexing.

View on GitHub
Deep Wiki
Context7

Getting Started

  • Install indexnowkit/core ^0.13 and indexnowkit/console ^0.5; add indexnowkit/sitemap ^0.8, indexnowkit/verify, and indexnowkit/history ^0.4 only if you need them. The bundle now boots without them; older pins conflict.
  • Register the bundle, then run bin/console indexnow:key:generate, indexnow:config, and indexnow:check. config is the fastest way to see what the tree actually resolved to (masked DSN, store status, verify state).
  • First real use case: annotate a controller with #[IndexNow], run indexnow:submit, then indexnow:status / indexnow:history to confirm what was queued and submitted.
  • Read docs/extending.md (replacing/decorating services and commands), docs/testing.md (clock, frozen time), docs/messenger.md (queue semantics and log lines), and docs/bc.md before upgrading.
  • 0.15.0 is a consolidation release (waves L/M): no config keys were added, but many classes moved between the bundle and the core/console/history/sitemap packages. Re-run indexnow:config and indexnow:check after upgrading and diff the output.

Implementation Patterns

  • Read time through the clock. Every timing component — indexnowkit.throttle, the memory debounce store, indexnowkit.submitter, indexnowkit.command_submitter_factory, and the verify pre-flight decorators — takes its time from indexnowkit.clock (Psr\Clock\ClockInterface). Never call time() or new DateTimeImmutable() in your own decorator or store: if you do, the debounce window, the throttle window, and the submission record timestamp stop moving together.
  • Freeze time in tests. Replace indexnowkit.clock with IndexNowKit\Testing\FrozenClock in a compiler pass; one swap deterministically controls debounce, throttle, and record timestamps.
  • Locales. #[IndexNow(locales: 'all')] expands against framework.enabled_locales. If that list is empty, the rule collapses to a single unlocalized URL — indexnow:check now emits router.locales, and the router bridge logs one warning per process on the indexnow channel.
  • Replacing a command. The SymfonyBundle\Command\* classes are gone (they now come from console, sitemap, and history). Decorate the runner — indexnowkit.console.submit_entity, etc. — or register a command of your own under the same name, per docs/extending.md "Replacing a command".
  • Custom FlushListener. If you build it by hand, the signature is (CollectorInterface, Closure(): IndexNowKit): pass static fn () => $container->get('indexnowkit') instead of the old PSR-11 locator.
  • Verify wiring. indexnowkit.verify.submitter and indexnowkit.verify.command_submitter_factory pass arguments by name now; adding a parameter to Verify\VerifyingSubmitter fails compilation instead of silently shifting values.
  • Messenger. indexnowkit.dispatcher wraps the core's Dispatch\BatchingDispatcher and takes indexnowkit.config; its log lines ({count} URL(s) queued as message {id}, cannot queue … they are lost: …) come from the core.
  • Config/check sources. check and config read indexnowkit.console.config_source (Console\ConfigSourceInterface), so a custom source is the hook if you need to feed them from somewhere else.

Gotchas and Tips

  • Breaking (direct references only): any decorates: on, instanceof against, or subclass of IndexNowKit\SymfonyBundle\Command\* breaks — the classes are final and no longer in the bundle. Same for the removed SymfonyBundle\Check\SampleOptions and SymfonyBundle\Check\VerifySampleCheck (service ids indexnowkit.check.samples / indexnowkit.check.verify_sample still resolve to the core classes) and the removed Check\LocalesCheck / Check\EntitySampler (service ids indexnowkit.check.locales / indexnowkit.check.entity_sampler.callable remain, backed by the core and Console\SubjectSampler).
  • MessengerDispatcher constructor changed (Config instead of $logUrls/$batchMaxUrls). It's internal, but hand-wired test doubles need updating; SubmitUrlsMessage::newId() delegates to BatchingDispatcher::newJobId().
  • FlushListener service locator removed. PSR-11 says a container shouldn't be injected so an object can fetch its own dependencies — the closure is equally lazy.
  • Optional packages are now genuinely optional. Detection goes through Adapter\OptionalPackage::sitemap()/verify()/history(), not the packages' *Services::package(); the old path fataled at compile time if a package was absent.
  • Profiler panel masks DSN credentials in store exception messages — safer screenshots.
  • cache.app (missing) in the debounce store status line means the pool id isn't a service; the bundle now prints HistoryServices::describeStore()'s text instead of the bare id.
  • Debugging a local DI change: with debug: false, Symfony never checks container freshness. If your own functional kernels do this, fingerprint the sources into the cache path (as the bundle's suite now does) or you'll test against a stale container.
  • Command\EntityLoader still lives in the bundle and extends Console\AbstractSubjectLoader; constructor and manager() are unchanged, so existing subclasses keep working.
  • Messenger tests should run the in-memory transport with ?serialize=true; otherwise the message and its stamps are handed back as the same object and encode/decode bugs stay invisible.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums