|
@@ -4,6 +4,8 @@ namespace Goodquestiondev;
|
|
|
|
|
|
use Illuminate\Support\Str;
|
|
|
use Goodquestiondev\Resource;
|
|
|
+use Goodquestiondev\Controllers\Controller;
|
|
|
+use Symfony\Component\HttpFoundation\Request;
|
|
|
|
|
|
class Route
|
|
|
{
|
|
@@ -86,19 +88,17 @@ class Route
|
|
|
/**
|
|
|
* Redirects the user to the correct controller and method based on the path
|
|
|
*
|
|
|
- * @param string $verb The request verb
|
|
|
- * @param string $path The path string
|
|
|
- * @param string $content The request data content
|
|
|
+ * @param Request $request The request data content
|
|
|
*
|
|
|
* @return Resource
|
|
|
*/
|
|
|
- public static function getResource(string $verb, string $path, string $content)
|
|
|
+ public static function getResource($request)
|
|
|
{
|
|
|
$route = self::getInstance();
|
|
|
- $uriInfo = $route->getUriInfo($path);
|
|
|
+ $uriInfo = $route->getUriInfo($request->getPathInfo());
|
|
|
foreach ($route->resources as $resource) {
|
|
|
if (in_array($uriInfo['uri'], $resource->uriList)) {
|
|
|
- $resource->handleRequest($verb, $path, $uriInfo, $content);
|
|
|
+ $route->callController($resource, $request, $uriInfo);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
@@ -152,4 +152,70 @@ class Route
|
|
|
'params' => $params
|
|
|
];
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Find controller and instantiate it
|
|
|
+ *
|
|
|
+ * @param Resource $resource The Resource verb
|
|
|
+ * @param Request $request The request
|
|
|
+ * @param array $uriInfo The url info
|
|
|
+ *
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function callController(Resource $resource, Request $request, array $uriInfo)
|
|
|
+ {
|
|
|
+ $app = Application::getInstance();
|
|
|
+ try {
|
|
|
+ $controllerClassName = $app->controllerUris[$resource->uri];
|
|
|
+ $controllerName = "Goodquestiondev\\Controllers\\{$controllerClassName}";
|
|
|
+ $controller = new $controllerName;
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ throw new \Exception('Error getting Controller');
|
|
|
+ }
|
|
|
+ $this->callAction($controller, $resource, $request, $uriInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Call the Controller method
|
|
|
+ *
|
|
|
+ * @param Controller $controller The controller
|
|
|
+ * @param Resource $resource The Resource verb
|
|
|
+ * @param Request $request The request
|
|
|
+ *
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function callAction(Controller $controller, Resource $resource, Request $request, array $uriInfo)
|
|
|
+ {
|
|
|
+ $path = $request->getPathInfo();
|
|
|
+ switch ($request->getMethod()) {
|
|
|
+ case 'GET':
|
|
|
+ if (Str::contains($path, 'create')) {
|
|
|
+ $controller->create();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (Str::contains($path, 'edit')) {
|
|
|
+ $controller->edit($uriInfo['params']);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (Str::contains($uriInfo['uri'], '{')) {
|
|
|
+ $controller->show($uriInfo['params']);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ $controller->index();
|
|
|
+
|
|
|
+ break;
|
|
|
+ case 'POST':
|
|
|
+ $controller->store($request);
|
|
|
+ break;
|
|
|
+ case 'PUT':
|
|
|
+ case 'PATCH':
|
|
|
+ $controller->update($request, $uriInfo['params']);
|
|
|
+ break;
|
|
|
+ case 'DELETE':
|
|
|
+ $controller->destroy($uriInfo['params']);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ $controller->error($request);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|