Installation:
composer require codag/predictionio-bundle:dev-master
Add to AppKernel.php:
new Codag\PredictionIOBundle\CodagPredictionIOBundle(),
Configuration (config.yml):
codag_prediction_io:
app_key: "your_predictionio_app_key"
api_url: "http://your-predictionio-server:8000"
First Use Case:
Inject the service and call a PredictionIO method (e.g., trackEvent):
use Codag\PredictionIOBundle\Service\PredictionIOService;
class MyController extends Controller
{
public function index(PredictionIOService $predictionIO)
{
$predictionIO->trackEvent(
'user123', // user ID
'product_view', // event name
['productId' => 'prod456'] // event data
);
return new Response('Event tracked!');
}
}
Codag\PredictionIOBundle\Service\PredictionIOService (wraps the PredictionIO-PHP-SDK).app/config/config.yml for app_key and api_url.Event Tracking: Log user actions (e.g., clicks, purchases) for real-time recommendations:
$predictionIO->trackEvent('user789', 'purchase', ['itemId' => '123']);
Recommendations: Fetch real-time or batch recommendations:
$recommendations = $predictionIO->recommendItems('user456', 'product', 5);
User Segmentation: Query user segments (e.g., "high-value customers"):
$users = $predictionIO->getUsersInSegment('high_value');
PredictionIOService in controllers/services via autowiring or manual injection.KernelEvents::TERMINATE):
public function onKernelTerminate(GetResponseEvent $event)
{
$request = $event->getRequest();
$predictionIO->trackEvent($request->get('userId'), 'page_view', ['url' => $request->getUri()]);
}
| Use Case | Example Code |
|---|---|
| Track e-commerce events | $predictionIO->trackEvent('user1', 'add_to_cart', ['productId' => '1001']); |
| Get personalized recs | $recs = $predictionIO->recommendItems('user1', 'movie', 3); |
| Update user profile | $predictionIO->setUserProfile('user1', ['age' => 30, 'gender' => 'M']); |
Deprecated SDK:
PredictionIO-PHP-SDK is outdated (last updated in 2015). Methods may not align with newer PredictionIO versions (e.g., v0.12+).Configuration Sensitivity:
app_key or api_url in config.yml exposes secrets. Use Symfony’s %env% or parameter bags:
codag_prediction_io:
app_key: "%env(PREDICTIONIO_APP_KEY)%"
Error Handling:
try {
$predictionIO->trackEvent(...);
} catch (\Exception $e) {
$this->container->get('logger')->error('PredictionIO error: ' . $e->getMessage());
}
CORS/Proxy Issues:
HttpClient with a custom adapter).debug: true in the bundle config to log raw API responses:
codag_prediction_io:
debug: true
PredictionIO.log (if configured).Custom Services:
Extend PredictionIOService to add domain-specific methods:
class CustomPredictionIOService extends PredictionIOService
{
public function trackCartUpdate(string $userId, array $cartItems): void
{
$this->trackEvent($userId, 'cart_update', ['items' => $cartItems]);
}
}
Event Subscribers: Create subscribers to auto-track events (e.g., Doctrine lifecycle events):
class CartSubscriber implements EventSubscriber
{
public function getSubscribedEvents()
{
return [
'kernel.request' => 'onKernelRequest',
];
}
public function onKernelRequest(GetResponseEvent $event)
{
$cart = $event->getRequest()->get('cart');
$predictionIO->trackEvent('user1', 'cart_update', $cart);
}
}
Async Processing:
Use Symfony’s Messenger component to queue PredictionIO calls for background processing:
$message = new TrackPredictionIOEvent('user1', 'event_name', ['data']);
$this->messageBus->dispatch($message);
api_url ends with / (e.g., http://example.com/api/). The SDK may prepend paths incorrectly.codag_prediction_io:
ssl_verification: false # Avoid in prod!
How can I help you explore Laravel packages today?