Installation
composer require cravler/remote-bundle:@dev
Ensure you’re using @dev for the latest features (no stable release yet).
Enable the Bundle
Add to app/AppKernel.php:
new Cravler\RemoteBundle\CravlerRemoteBundle(),
Routing
Include in app/config/routing.yml:
cravler_remote:
resource: "@CravlerRemoteBundle/Resources/config/routing.xml"
Node Dependencies Install frontend assets (critical for WebSocket/real-time features):
npm install --prefix vendor/cravler/remote-bundle/Cravler/RemoteBundle/Resources/nodejs
First Use Case
Configure ports/secrets in app/config/config.yml:
cravler_remote:
app_port: 8080 # Local app port
remote_port: 8081 # Remote server port
server_port: 8082 # Admin/server port
secret: "YourSecureToken123" # Change this!
Start services (Ubuntu example):
app/console cravler:remote:ubuntu:upstart server
app/console cravler:remote:ubuntu:upstart app
Real-Time Communication
routing.xml) to sync data between local/remote instances.cravler_remote_socket route.Service Isolation
Authentication
user_provider (e.g., Symfony’s security system) to validate remote requests:
cravler_remote:
user_provider: security.user.provider.custom
Data Sync
CravlerRemoteBundle\Event\RemoteSyncEvent to listen for data changes:
// src/EventListener/RemoteSyncListener.php
public function onRemoteSync(RemoteSyncEvent $event) {
$data = $event->getData();
// Process/sync $data to remote
}
Register in services.yml:
services:
cravler.remote.sync_listener:
class: AppBundle\EventListener\RemoteSyncListener
tags:
- { name: kernel.event_listener, event: cravler.remote.sync, method: onRemoteSync }
Frontend Integration
vendor/cravler/remote-bundle/Cravler/RemoteBundle/Resources/nodejs/dist/remote.js) to handle WebSocket connections:
const socket = new WebSocket(`ws://localhost:8081/remote_socket`);
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
// Handle remote data
};
Port Conflicts
app_port, remote_port, and server_port are unused. Use netstat -tulnp to check.config.yml or kill conflicting processes.Node Dependencies
npm install fails:
Secret Token
secret (ThisTokenIsNotSoSecretChangeIt) is insecure. Always override it in config.yml.secret: "%env(REMOTE_BUNDLE_SECRET)%"
Ubuntu Upstart
cravler:remote:ubuntu:upstart commands generate init scripts for service management.Event Dispatching
RemoteSyncEvent must be manually dispatched. Forgetting to trigger them breaks sync:
// Wrong: Event won't fire
$event = new RemoteSyncEvent($data);
// Correct: Dispatch via EventDispatcher
$this->get('event_dispatcher')->dispatch(
'cravler.remote.sync',
$event
);
WebSocket Issues
WebSocket connection to 'ws://...' failed).# app/config/config.yml
monolog:
handlers:
cravler_remote:
type: stream
path: "%kernel.logs_dir%/cravler_remote.log"
level: debug
Port Binding Failures
app/console debug:config cravler_remote to verify config values.curl http://localhost:8081/remote_health_check
Custom User Provider
Cravler\RemoteBundle\Security\User\RemoteUserProvider to integrate with your auth system:
class CustomRemoteUserProvider extends RemoteUserProvider {
public function loadUserByUsername($username) {
// Custom logic (e.g., API call)
}
}
Register in config.yml:
cravler_remote:
user_provider: app.custom.remote_user_provider
Custom Events
RemoteDataTransformEvent) and listeners.Frontend Customization
Resources/nodejs/ to your project and updating paths in routing.xml.Remote API Endpoints
routing.xml under <cravler_remote> to expose additional remote APIs.How can I help you explore Laravel packages today?