cowegis/cowegis-client-bundle
Install the Bundle Run:
composer require cowegis/cowegis-client-bundle
Then enable the bundle in config/bundles.php:
return [
// ...
Cowegis\ClientBundle\CowegisClientBundle::class => ['all' => true],
];
Publish Assets Dump assets to integrate the Cowegis JavaScript client:
php bin/console assets:install public
npm install && npm run build # If using Webpack Encore
First Use Case: Embedding a Map
Add the Cowegis client to your Symfony template (e.g., templates/base.html.twig):
{{ encore_entry_script_tags('app') }} {# Ensure Webpack Encore is configured #}
<script src="{{ asset('bundles/cowegis/client/cowegis.js') }}"></script>
Initialize the client in a Twig template or JavaScript file:
const cowegis = new Cowegis({
apiKey: 'YOUR_API_KEY', // Replace with your Cowegis API key
container: document.getElementById('map-container')
});
API Key Management
Store the Cowegis API key in Symfony’s .env:
COWEGIS_API_KEY=your_api_key_here
Access it in Twig or PHP:
<script>
const apiKey = "{{ env('COWEGIS_API_KEY') }}";
</script>
Dynamic Configuration Pass runtime data (e.g., map center, layers) via Symfony’s Twig:
<script>
const config = {
center: {{ coordinates|json_encode }},
layers: {{ layers|json_encode }}
};
const cowegis = new Cowegis({ ...config, apiKey });
</script>
Event Handling Use Symfony’s event system to trigger Cowegis actions (e.g., after a form submission):
// src/EventListener/CowegisListener.php
use Symfony\Component\HttpKernel\Event\RequestEvent;
class CowegisListener {
public function onKernelRequest(RequestEvent $event) {
if ($event->isMainRequest()) {
// Dispatch a JavaScript event to Cowegis
$event->getRequest()->attributes->set('cowegis_event', 'map:update');
}
}
}
Listen in JavaScript:
document.addEventListener('DOMContentLoaded', () => {
if (window.cowegisEvent === 'map:update') {
cowegis.updateMap();
}
});
Asset Optimization Configure Webpack Encore to bundle Cowegis with your app:
// webpack.config.js
Encore
.addEntry('app', './assets/app.js')
.copyFiles({
from: './vendor/cowegis/client/dist',
to: 'bundles/cowegis/client/[path][name].[hash].[ext]'
});
Asset Paths
assets:install is run after installation. Cowegis JS/CSS files are copied to public/bundles/cowegis/client/.public directory is writable.API Key Exposure
.env and Twig’s env() function.ParameterBag to inject the key into services.JavaScript Conflicts
Cowegis). Use Webpack’s ProvidePlugin to avoid conflicts:
// webpack.config.js
Encore.configureBabelPresetEnv((config) => {
config.useBuiltIns = 'usage';
config.corejs = 3;
});
Encore.enableSingleRuntimeChunk();
Debugging
cowegis.js 404).{{ dump(env('COWEGIS_API_KEY')) }} in Twig to verify environment variables.Extension Points
class CustomCowegis extends Cowegis {
constructor(config) {
super(config);
this.addCustomLayer();
}
}
<script src="{{ asset('bundles/cowegis/client/cowegis.js') }}"></script>
<script src="{{ asset('js/custom-cowegis.js') }}"></script>
Symfony UX Integration
// src/Controller/MapController.php
use Symfony\UX\LiveComponent\Attribute\AsLiveComponent;
#[AsLiveComponent('map')]
class MapController extends AbstractController {
public function __invoke(Request $request) {
return $this->render('map/index.html.twig');
}
}
Testing
// tests/assets/mock-cowegis.js
window.Cowegis = jest.fn().mockImplementation(() => ({
updateMap: jest.fn()
}));
KernelBrowser to test interactions:
$client = static::createClient();
$client->enableProfiler();
$client->request('GET', '/map');
How can I help you explore Laravel packages today?