parent
3613a04f49
commit
d8acd801d2
82
src/FuzeWorks/Event/RouterLoadCallableEvent.php
Normal file
82
src/FuzeWorks/Event/RouterLoadCallableEvent.php
Normal 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;
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user