setono / prerender-bundle
A Symfony bundle that integrates 'prerender' services, i.e. rendertron or prerender.io
Installs: 5 195
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 1
Open Issues: 3
Type:symfony-bundle
Requires
- php: >=7.4
- league/uri: ^6.5
- league/uri-components: ^2.4
- setono/bot-detection-bundle: ^1.9
- symfony/config: ^5.4 || ^6.0
- symfony/dependency-injection: ^5.4 || ^6.0
- symfony/event-dispatcher: ^5.4 || ^6.0
- symfony/http-client: ^5.4 || ^6.0
- symfony/http-client-contracts: ^2.5 || ^3.0
- symfony/http-foundation: ^5.4 || ^6.0
- symfony/http-kernel: ^5.4 || ^6.0
- webmozart/assert: ^1.10
Requires (Dev)
- matthiasnoback/symfony-dependency-injection-test: ^4.3
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.6
- psalm/plugin-phpunit: ^0.18
- psalm/plugin-symfony: ^5.0
- setono/code-quality-pack: ^2.4
- symfony/process: ^5.4 || ^6.0
This package is auto-updated.
Last update: 2024-12-15 13:16:38 UTC
README
Use this bundle to (pre)render a request or URL. This is useful if you render your page using javascript and want to show the HTML output of that page to Googlebot or other clients not very fond of javascript.
See Googles own help page on this topic: Implement dynamic rendering.
Installation
To install this bundle, simply run:
composer require setono/prerender-bundle
This will install the bundle and enable it if you're using Symfony Flex. If you're not using Flex, add the bundle
manually to bundles.php
instead.
Configuration
The bundle is already preconfigured for you if you want to use the open source version of prerender.io. Then you just need to run that service. However, you can configure it easily like so:
# config/packages/setono_prerender.yaml setono_prerender: adapter: prerender: 'http://your-prerender-url.com'
If you want to create your own prerenderer service, just implement the PrerendererInterface
and tag your service with setono_prerender.prerenderer
. Then in the configuration of the bundle do this:
# config/packages/setono_prerender.yaml setono_prerender: prerenderer: 'the-service-id-of-your-prerenderer-service'
Usage
Here is a very basic example of a product controller where we want to render the index action:
<?php declare(strict_types=1); namespace App\Controller; use Setono\PrerenderBundle\Prerenderer\PrerendererInterface; use Symfony\Component\HttpFoundation\Response; final class ProductController { public function index(PrerendererInterface $prerenderer): Response { if($this->isBot()) { // return the rendered HTML if the client is a bot return new Response($prerenderer->renderMainRequest()); } // render the response the normal way if the client is NOT a bot return new Response('...'); } /** * Method that returns true if the client is a bot */ private function isBot(): bool { // ... } }