Installation
composer require bayardev/shared-tools-bundle
Ensure your project meets the PHP ≥5.6 requirement (upgrade if needed).
Create VERSION file
Add an empty VERSION file in your project root (required for versioning utilities).
Enable the Bundle
Register in config/bundles.php (Symfony Flex) or app/AppKernel.php (legacy):
return [
// ...
Bayardev\SharedToolsBundle\BayardevSharedToolsBundle::class => ['all' => true],
];
First Use Case Test the version helper via Twig:
{{ app.version() }} {# Outputs version from VERSION file #}
Or in PHP:
$version = $this->get('bayardev_shared_tools.version')->getVersion();
Version Management
app.version() in Twig or $this->get('bayardev_shared_tools.version') in controllers.VERSION file logic by extending the VersionService:
// src/Service/CustomVersionService.php
class CustomVersionService extends \Bayardev\SharedToolsBundle\Service\VersionService {
public function getVersion() {
return file_get_contents('custom/path/VERSION');
}
}
Register as a service in config/services.yaml:
services:
Bayardev\SharedToolsBundle\Service\VersionService: '@App\Service\CustomVersionService'
Logging Utilities
Bayardev\SharedToolsBundle\Logger\StructuredLogger for JSON-formatted logs:
$logger = $this->get('bayardev_shared_tools.structured_logger');
$logger->info('User login', ['user_id' => 123, 'ip' => '192.168.1.1']);
config/packages/monolog.yaml:
handlers:
structured:
type: service
id: bayardev_shared_tools.structured_logger
Request Helpers
app.request.client_ip.Bayardev\SharedToolsBundle\Helper\RequestHelper:
$ua = $this->get('bayardev_shared_tools.request_helper')->getUserAgent();
$browser = $ua->getBrowserName();
Response Utilities
Bayardev\SharedToolsBundle\Response\JsonResponse:
return $this->jsonResponse(['success' => true], 200);
bayardev.tools.version.loaded to react to version changes.TwigExtension:
{{ "hello"|uppercase_with_prefix("Prefix: ") }} {# "Prefix: HELLO" #}
VersionService).Version File Dependency
VERSION file is mandatory. Forgetting it causes VersionService to throw RuntimeException..gitignore if using dynamic versions (e.g., CI-generated).Legacy Kernel Support
symfony/flex as a dev dependency.composer require symfony/flex and run composer dump-autoload.Logger Overrides
StructuredLogger replaces the default logger if not configured properly. Explicitly define handlers in monolog.yaml to avoid losing logs:
handlers:
main:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
structured:
type: service
id: bayardev_shared_tools.structured_logger
Request Helper Caching
RequestHelper caches user agent parsing. Clear cache with:
$this->get('bayardev_shared_tools.request_helper')->clearCache();
config/packages/bayardev_shared_tools.yaml:
bayardev_shared_tools:
request_helper:
cache_user_agent: false
Version Service Issues
VERSION (must be readable).bin/console debug:container bayardev_shared_tools.version).Logger Not Working
monolog is enabled in config/bundles.php.Custom Version Sources
Bayardev\SharedToolsBundle\Service\VersionSourceInterface for alternative version providers (e.g., Git tags, API calls).Twig Filters
Bayardev\SharedToolsBundle\Twig\TwigExtension:
// src/Twig/AppExtension.php
class AppExtension extends \Bayardev\SharedToolsBundle\Twig\TwigExtension {
public function getFunctions() {
return [
new \Twig\TwigFunction('custom_filter', [$this, 'customFilter']),
];
}
}
config/packages/twig.yaml:
twig:
paths: ['%kernel.project_dir%/templates']
extensions:
- App\Twig\AppExtension
Event Listeners
bayardev.tools.version.loaded to trigger actions on version changes:
// src/EventListener/VersionListener.php
class VersionListener implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return [
'bayardev.tools.version.loaded' => 'onVersionLoaded',
];
}
public function onVersionLoaded(VersionEvent $event) {
// Logic here
}
}
config/packages/bayardev_shared_tools.yaml:
bayardev_shared_tools:
version:
enabled: true
request_helper:
enabled: false # Disable if not needed
RequestHelper to reduce parsing overhead:
bayardev_shared_tools:
request_helper:
cache_user_agent: true
cache_ttl: 3600 # 1 hour
How can I help you explore Laravel packages today?