/** * Add a new detector to the list of detectors that a request can use. * There are several different formats and types of detectors that can be set. * ### Environment value comparison * An environment value comparison, compares a value fetched from `env()` to a known value * the environment value is equality checked against the provided value. * e.g `addDetector('post', array('env' => 'REQUEST_METHOD', 'value' => 'POST'))` * ### Pattern value comparison * Pattern value comparison allows you to compare a value fetched from `env()` to a regular expression. * e.g `addDetector('iphone', array('env' => 'HTTP_USER_AGENT', 'pattern' => '/iPhone/i'));` * ### Option based comparison * Option based comparisons use a list of options to create a regular expression. Subsequent calls * to add an already defined options detector will merge the options. * e.g `addDetector('mobile', array('env' => 'HTTP_USER_AGENT', 'options' => array('Fennec')));` * ### Callback detectors * Callback detectors allow you to provide a 'callback' type to handle the check. The callback will * receive the request object as its only parameter. * e.g `addDetector('custom', array('callback' => array('SomeClass', 'someMethod')));` * ### Request parameter detectors * Allows for custom detectors on the request parameters. * e.g `addDetector('post', array('param' => 'requested', 'value' => 1)` * * @param string $name The name of the detector. * @param array $options The options for the detector definition. See above. * * @return void */ public function addDetector($name, $options) { $name = strtolower($name); if (isset($this->detectors[$name]) && isset($options['options'])) { $options = \Xoops_Utils::arrayRecursiveMerge($this->detectors[$name], $options); } $this->detectors[$name] = $options; }