Attaching multiple event handlers to onBeginRequest

  1. General
  2. Researching around
  3. Solution

General

There came the need to perform two operations, always, on 'application boot' time. Example? My real world example involved some geo-location logic (that's the first operation) and syncing of some session details so KcFinder can be in sync with the user in context - each user with his own session container (the second).

Researching around

So anyone who ever attached a single handler to CWebApplication.onBeginRequest knows its easily done by modifying config/main.php like this (for example):

return array(
    ...
    // that's php 5.4 array notation below...
    'onBeginRequest' => ['SomeClass', 'someStaticMethod'],
    'import => [...],
    'modules' => [...],
    ...
);

That's nice but its not possible at the moment to attach several event handlers at the same time.

Solution

I've followed the suggestions described in this old bug report and altered index.php accordingly, so from this:

require_once($yii);
Yii::createWebApplication($config)->run();

I came to this:

require_once($yii);
$webapp = Yii::createWebApplication($config);
$webapp->onBeginRequest = ['MyClassA', 'staticMethodA'];
$webapp->onBeginRequest = ['MyClassB', 'staticMethodB'];
$webapp->run();

A quick debugging revealed - both methods are being called exactly as presumed. QED.

1 0
2 followers
Viewed: 8 853 times
Version: 1.1
Category: How-tos
Written by: Boaz
Last updated by: CeBe
Created on: Mar 13, 2014
Last updated: 4 years ago
Update Article

Revisions

View all history

Related Articles