This commit is contained in:
2020-09-04 18:44:01 +08:00
parent 412ebc1afc
commit 1d7cc3fa81
3 changed files with 19 additions and 15 deletions
+10 -7
View File
@@ -49,13 +49,16 @@ class Middleware
*/ */
public function getGenerate($node) public function getGenerate($node)
{ {
$last = function ($passable) use ($node) { foreach ($node->handler as $key => $value) {
return Dispatch::create($node->handler, $passable)->dispatch(); $last = function ($passable) use ($node) {
}; return Dispatch::create($node->handler, $passable)->dispatch();
$middleWares = $this->annotation($node); };
$data = array_reduce(array_reverse($middleWares), $this->core(), $last); $middleWares = $this->annotation($node);
$this->middleWares = []; $data = array_reduce(array_reverse($middleWares), $this->core(), $last);
return $node->callback = $data; $this->middleWares = [];
$node->callback[$key] = $data;
}
return $node;
} }
+7 -6
View File
@@ -31,7 +31,7 @@ class Node extends Application
private $_error = ''; private $_error = '';
public $rules = []; public $rules = [];
public $handler; public $handler = [];
public $htmlSuffix = '.html'; public $htmlSuffix = '.html';
public $enableHtmlSuffix = false; public $enableHtmlSuffix = false;
public $namespace = []; public $namespace = [];
@@ -42,23 +42,24 @@ class Node extends Application
/** /**
* @param $handler * @param $handler
* @param $method
* @return Node * @return Node
* @throws * @throws Exception
*/ */
public function bindHandler($handler) public function bindHandler($handler, $method)
{ {
if ($handler instanceof Closure) { if ($handler instanceof Closure) {
$this->handler = $handler; $this->handler[$method] = $handler;
} else if (is_string($handler) && strpos($handler, '@') !== false) { } else if (is_string($handler) && strpos($handler, '@') !== false) {
list($controller, $action) = explode('@', $handler); list($controller, $action) = explode('@', $handler);
if (!empty($this->namespace)) { if (!empty($this->namespace)) {
$controller = implode('\\', $this->namespace) . '\\' . $controller; $controller = implode('\\', $this->namespace) . '\\' . $controller;
} }
$this->handler = $this->getReflect($controller, $action); $this->handler[$method] = $this->getReflect($controller, $action);
} else if ($handler != null && !is_callable($handler, true)) { } else if ($handler != null && !is_callable($handler, true)) {
$this->_error = 'Controller is con\'t exec.'; $this->_error = 'Controller is con\'t exec.';
} else { } else {
$this->handler = $handler; $this->handler[$method] = $handler;
} }
return $this->restructure(); return $this->restructure();
} }
+2 -2
View File
@@ -59,7 +59,7 @@ class Router extends Application implements RouterInterface
if ($first !== '/') { if ($first !== '/') {
$parent = $this->bindNode($parent, $explode, $method); $parent = $this->bindNode($parent, $explode, $method);
} }
return $parent->bindHandler($handler); return $parent->bindHandler($handler, $method);
} }
/** /**
@@ -429,7 +429,7 @@ class Router extends Application implements RouterInterface
if (!in_array($request->getMethod(), $node->method)) { if (!in_array($request->getMethod(), $node->method)) {
return JSON::to(405, 'Method not allowed.'); return JSON::to(405, 'Method not allowed.');
} }
if (empty($node->callback)) { if (empty($node->callback) || isset($node->callback[$request->getMethod()])) {
return JSON::to(404, 'Method does not exist.'); return JSON::to(404, 'Method does not exist.');
} }
return call_user_func($node->callback, $request); return call_user_func($node->callback, $request);