1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- <?php namespace System\Routing;
- class Filter {
- /**
- * The loaded route filters.
- *
- * @var array
- */
- private static $filters = array();
- /**
- * Register a set of route filters.
- *
- * @param array $filters
- * @return void
- */
- public static function register($filters)
- {
- static::$filters = array_merge(static::$filters, $filters);
- }
- /**
- * Clear all of the registered route filters.
- *
- * @return void
- */
- public static function clear()
- {
- static::$filters = array();
- }
- /**
- * Call a set of route filters.
- *
- * @param string $filter
- * @param array $parameters
- * @param bool $override
- * @return mixed
- */
- public static function call($filters, $parameters = array(), $override = false)
- {
- foreach (explode(', ', $filters) as $filter)
- {
- if ( ! isset(static::$filters[$filter]))
- {
- throw new \Exception("Route filter [$filter] is not defined.");
- }
- $response = call_user_func_array(static::$filters[$filter], $parameters);
- // "Before" filters may override the request cycle. For example, an authentication
- // filter may redirect a user to a login view if they are not logged in. Because of
- // this, we will return the first filter response if overriding is enabled.
- if ( ! is_null($response) and $override)
- {
- return $response;
- }
- }
- }
- }
|