Implemented routerLoadCallableEvent

Fixes #3
This commit is contained in:
Abel Hoogeveen 2019-02-11 19:31:49 +01:00
parent 3613a04f49
commit d8acd801d2
No known key found for this signature in database
GPG Key ID: 96C2234920BF4292
2 changed files with 99 additions and 2 deletions

View File

@ -0,0 +1,82 @@
<?php
/**
* FuzeWorks Framework MVCR Component.
*
* The FuzeWorks PHP FrameWork
*
* Copyright (C) 2013-2019 TechFuze
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* @author TechFuze
* @copyright Copyright (c) 2013 - 2019, TechFuze. (http://techfuze.net)
* @license https://opensource.org/licenses/MIT MIT License
*
* @link http://techfuze.net/fuzeworks
* @since Version 1.2.0
*
* @version Version 1.2.0
*/
namespace FuzeWorks\Event;
use FuzeWorks\Event;
/**
* Event that gets fired when a callable is to be loaded by the Router class
*
* Use this to cancel the modify the loading of a custom callable or the defaultCallable
*
* Currently only used by Router::loadCallable();
*
* @author Abel Hoogeveen <abel@techfuze.net>
* @copyright Copyright (c) 2013 - 2019, TechFuze. (http://techfuze.net)
*/
class RouterLoadCallableEvent extends Event
{
/**
* The callable to be loaded
*
* @var callable
*/
public $callable;
/**
* The matches with which the callable is loaded
*
* @var array
*/
public $matches;
/**
* The route which resulted in this callable being loaded
*
* @var string
*/
public $route;
public function init(callable $callable, array $matches, string $route)
{
$this->callable = $callable;
$this->matches = $matches;
$this->route = $route;
}
}

View File

@ -36,6 +36,7 @@
namespace FuzeWorks;
use FuzeWorks\Event\RouterLoadCallableEvent;
use FuzeWorks\Event\RouterLoadViewAndControllerEvent;
use FuzeWorks\Exception\ConfigException;
use FuzeWorks\Exception\ControllerException;
@ -187,6 +188,7 @@ class Router
* @param string $path
* @return mixed
* @throws NotFoundException
* @throws RouterException
*/
public function route(string $path)
{
@ -248,6 +250,7 @@ class Router
* @param array $matches
* @param string $route
* @return mixed
* @throws RouterException
*/
protected function loadCallable(callable $callable, array $matches, string $route)
{
@ -257,10 +260,22 @@ class Router
if (!is_int($key))
Logger::log($key.': '.var_export($value, true).'');
}
Logger::stopLevel();
try {
/** @var RouterLoadCallableEvent $event */
$event = Events::fireEvent('routerLoadCallableEvent',
$callable,
$matches,
$route
);
} catch (EventException $e) {
throw new RouterException("Could not load callable. routerLoadCallableEvent threw exception: '".$e->getMessage()."'");
}
// Invoke callable
return call_user_func_array($callable, [$matches, $route]);
$output = call_user_func_array($event->callable, [$event->matches, $event->route]);
Logger::stopLevel();
return $output;
}
/**