public static function addBeforeFilter($controller, $method, $args)
{
$method = last(explode('::', $method));
$resourceName = array_key_exists(0, $args) ? snake_case(array_shift($args)) : null;
$lastArg = last($args);
if (is_array($lastArg)) {
$args = array_merge($args, array_extract_options($lastArg));
}
$options = array_extract_options($args);
if (array_key_exists('prepend', $options) && $options['prepend'] === true) {
$beforeFilterMethod = "prependBeforeFilter";
unset($options['prepend']);
} else {
$beforeFilterMethod = "beforeFilter";
}
$resourceOptions = array_except($options, ['only', 'except']);
$filterPrefix = "router.filter: ";
$filterName = "controller." . $method . "." . get_classname($controller) . "(" . md5(json_encode($args)) . ")";
if (!Event::hasListeners($filterPrefix . $filterName)) {
Event::listen($filterPrefix . $filterName, function () use($controller, $method, $resourceOptions, $resourceName) {
$controllerResource = app('Efficiently\\AuthorityController\\ControllerResource', [$controller, $resourceName, $resourceOptions]);
$controllerResource->{$method}();
});
call_user_func_array([$controller, $beforeFilterMethod], [$filterName, array_only($options, ['only', 'except'])]);
}
}