+3 −1
Original line number Diff line number Diff line
@@ -4,7 +4,9 @@
  "type": "project",
  "autoload": {
    "psr-4": {
      "Inifap\\Biblioteca\\": "src/"
      "Inifap\\Biblioteca\\": "src",
      "Inifap\\Biblioteca\\Routes\\": "src/routes",
      "Inifap\\Biblioteca\\Controllers\\": "src/controllers"
    }
  }
}
+3 −12
Original line number Diff line number Diff line
@@ -3,20 +3,11 @@
require_once __DIR__ . './vendor/autoload.php';

const VIEW_PATH = __DIR__ . '/src/views';
const CONTROLELRS_PATH = __DIR__ . '/src/controllers';
const MODULES_PATH = __DIR__ . '/src/modules';

use Inifap\Biblioteca\App;
use Inifap\Biblioteca\RouterManager;

$router = new RouterManager();
$router->addRoute("/biblioteca")->get(function () {
    include VIEW_PATH . '/home/index.php';
    // echo "Hola mundo";
});
$router->addRoute("/biblioteca/users/:id/:author")->get(function (array $params) {
    // echo "Hola mundo 3" . $params['id'] . " " . $params['author'];
    // include VIEW_PATH . '/home/index.php';
});
$app = new App();


$app = new App($router);
$app->run();
+17 −3
Original line number Diff line number Diff line
@@ -2,20 +2,34 @@

namespace Inifap\Biblioteca;

use Inifap\Biblioteca\Routes\HomeRoutes;
use Inifap\Biblioteca\Controllers\HomeController;
use Inifap\Biblioteca\Controllers\ArticleController;
use Inifap\Biblioteca\Routes\ArticleRoutes;

class App
{

    private RouterManager $routerManager;
    private HomeRoutes $homeRoutes;
    private ArticleRoutes $articleRoutes;

    public function __construct(RouterManager $routerManager)
    public function __construct()
    {
        $this->routerManager = $routerManager;
        $this->routerManager = new RouterManager();
        $this->homeRoutes = new HomeRoutes($this->routerManager, new HomeController());
        $this->articleRoutes = new ArticleRoutes($this->routerManager, new ArticleController());
    }

    public function run(): void
    {
        $path = $_SERVER['REQUEST_URI'] ?? '/';
        $method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
        $this->routerManager->resolve($path, $method);
        $body = [];

        if (in_array($method, ['POST', 'PUT', 'PATCH', 'DELETE'])) {
            $body = json_decode(file_get_contents('php://input'), true) ?? [];
        }
        $this->routerManager->resolve($path, $method, $body);
    }
}
+7 −6
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ class RouterManager
        return $this->routes[$path];
    }

    public function resolve(string $path, string $method): void
    public function resolve(string $path, string $method, ?array $body = []): void
    {
        if (substr($path, -1) === '/') {
            $path = rtrim($path, '/');
@@ -31,12 +31,13 @@ class RouterManager
                if (preg_match('/^' . $regex . '$/', $path, $params) && $route->hasMethod($method)) {
                    array_shift($params);
                    $route->setParams($params);
                    $this->callback($route, $method);
                    $this->callback($route, $method, $body);
                    return;
                }
            } else {
                if ($route->getPath() === $path) {
                    $this->callback($route, $method);
                if ($route->getPath() === $path && $route->hasMethod($method)) {
                    $this->callback($route, $method, $body);
                    return;
                }
            }
        }
@@ -45,11 +46,11 @@ class RouterManager
        include VIEW_PATH . '/errors/404.php';
    }

    private function callback(Route $route, string $method): void
    private function callback(Route $route, string $method, ?array $body = []): void
    {
        $callback = $route->getMethods()[$method];
        if (is_callable($callback)) {
            $callback($route->getParams());
            $callback($route->getParams(), $body);
            return;
        } else {
            echo "Method not allowed";
+31 −0
Original line number Diff line number Diff line
<?php

namespace Inifap\Biblioteca\Controllers;

class ArticleController extends Controller
{

    public function __construct()
    {
        parent::__construct();
    }

    public function create(?array $params, ?array $body): void
    {
        header('Content-Type: application/json; charset=utf-8');
        echo json_encode($body);
    }
    public function find(?array $params, ?array $body): void
    {
    }
    public function update(?array $params, ?array $body): void
    {
    }
    public function delete(?array $params, ?array $body): void
    {
    }
    public function render(?array $params): void
    {
        include VIEW_PATH . '/article/index.php';
    }
}
+17 −0
Original line number Diff line number Diff line
<?php

namespace Inifap\Biblioteca\Controllers;

abstract class Controller
{
    public function __construct()
    {
    }

    abstract public function create(?array $params, ?array $body): void;
    abstract public function find(?array $params, ?array $body): void;
    abstract public function update(?array $params, ?array $body): void;
    abstract public function delete(?array $params, ?array $body): void;

    abstract public function render(?array $params): void;
}
+29 −0
Original line number Diff line number Diff line
<?php

namespace Inifap\Biblioteca\Controllers;

class HomeController extends Controller
{

    public function __construct()
    {
        parent::__construct();
    }

    public function create(?array $params, ?array $body): void
    {
    }
    public function find(?array $params, ?array $body): void
    {
    }
    public function update(?array $params, ?array $body): void
    {
    }
    public function delete(?array $params, ?array $body): void
    {
    }
    public function render(?array $params): void
    {
        include VIEW_PATH . '/home/index.php';
    }
}
+27 −0
Original line number Diff line number Diff line
<?php

namespace Inifap\Biblioteca\Routes;

use Inifap\Biblioteca\Controllers\Controller;
use Inifap\Biblioteca\RouterManager;

class ArticleRoutes extends Routes
{
    public function __construct(RouterManager $routerManager, Controller $controller)
    {
        parent::__construct($routerManager, $controller);
    }

    public function setupRoutes(): void
    {
        $this->routerManager->addRoute("/biblioteca/articulo/:id")->get(function (array $params) {
            $this->controller->render($params);
        });

        $this->routerManager->addRoute("/biblioteca/articulo")->post(function (array $params, array $body) {
            $this->controller->create($params, $body);
        })->put(function (array $params, array $body) {
            $this->controller->create($params, $body);
        });
    }
}
+21 −0
Original line number Diff line number Diff line
<?php

namespace Inifap\Biblioteca\Routes;

use Inifap\Biblioteca\Controllers\Controller;
use Inifap\Biblioteca\RouterManager;

class HomeRoutes extends Routes
{

    public function __construct(RouterManager $routerManager, Controller $controller)
    {
        parent::__construct($routerManager, $controller);
    }
    public function setupRoutes(): void
    {
        $this->routerManager->addRoute("/biblioteca")->get(function (array $params) {
            $this->controller->render($params);
        });
    }
}
+21 −0
Original line number Diff line number Diff line
<?php

namespace Inifap\Biblioteca\Routes;

use Inifap\Biblioteca\Controllers\Controller;
use Inifap\Biblioteca\RouterManager;

abstract class Routes
{
    protected  RouterManager $routerManager;
    protected Controller $controller;

    public function __construct(RouterManager $routerManager, Controller $controller)
    {
        $this->routerManager = $routerManager;
        $this->controller = $controller;
        $this->setupRoutes();
    }

    abstract public function setupRoutes(): void;
}
+136 −0
Original line number Diff line number Diff line
<!DOCTYPE html>
<html lang="es">

<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="description" content="">
	<meta name="viewport" content="width=device-width">

	<!--NO MODIFICAR-->
	<title>INIFAP C.E. Zacatecas</title>


	<!-- Global site tag (gtag.js) - Google Analytics -->
	<script async src="https://www.googletagmanager.com/gtag/js?id=G-HXXJYQTXCE"></script>
	<script>
		window.dataLayer = window.dataLayer || [];

		function gtag() {
			dataLayer.push(arguments);
		}
		gtag('js', new Date());

		gtag('config', 'G-HXXJYQTXCE');
	</script>
	<link rel='stylesheet' type='text/css' href='https://framework-gb.cdn.gob.mx/assets/styles/main.css'>
</head>

<body>
	<main class="page">

		<nav class="navbar navbar-inverse sub-navbar navbar-fixed-top">
			<div class="container">
				<div class="navbar-header">
					<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#subenlaces">
						<span class="sr-only">Interruptor de Navegación</span>
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
					</button>
					<a class="navbar-brand" href="/"></a>
				</div>
				<div class="collapse navbar-collapse" id="subenlaces">
					<ul class="nav navbar-nav navbar-right">
						<li class="landing-btn"><a href="https://www.gob.mx/inifap/archivo/articulos">Blog</a></li>
						<li class="landing-btn"><a href="https://www.gob.mx/inifap/archivo/multimedia">Multimedia</a></li>
						<li class="landing-btn"><a href="https://www.gob.mx/inifap/archivo/prensa">
								Prensa </a>
						</li>
						<li class="landing-btn">
							<a href="https://www.gob.mx/inifap/archivo/agenda">
								Agenda </a>
						</li>
						<li class="landing-btn">
							<a href="https://www.gob.mx/inifap/archivo/acciones_y_programas">
								Acciones y programas </a>
						</li>
						<li class="landing-btn">
							<a href="https://www.gob.mx/inifap/archivo/documentos">
								Documentos </a>
						</li>
						<li class="landing-btn">
							<a href="https://vun.inifap.gob.mx/portalweb/_Transparencia">
								Transparencia </a>
						</li>
						<li class="landing-btn">
							<a href="https://www.gob.mx/agricultura/es/#344">
								Contacto </a>
						</li>
					</ul>
				</div>
			</div>
		</nav>
		<!--NO MODIFICAR-->
		<!--SECCIÓN DINÁMICA PARA DETECCIÓN DE LOCALIZACIÓN A TRAVÉS DE breadcrumb-->
		<div class="container">
			<ol class="breadcrumb top-buffer">
				<li><a href="http://www.gob.mx"><i class="icon icon-home"></i></a></li>
				<li><a href="http://www.gob.mx/inifap">Instituto Nacional de Investigaciones Forestales, Agrícolas y Pecuarias</a></li>
				<li><a href="index.php">Inifap C.E. Zacatecas</a></li>
				<li class="active">Biblioteca Digital</li>
			</ol>
		</div>


		<div class="container">
			Article Details
		</div>
	</main>

	<!--<script src="https://framework-gb.cdn.gob.mx/gobmx.js"></script>-->

	<script src="https://framework-gb.cdn.gob.mx/gobmx.js"></script>

	<script type="text/javascript">
		$gmx(document).ready(function() {

			var consulta;

			//hacemos focus al campo de búsqueda
			$("#busqueda").focus();

			//comprobamos si se pulsa una tecla
			$("#busqueda").keyup(function(e) {

				//obtenemos el texto introducido en el campo de búsqueda
				consulta = $("#busqueda").val();

				//hace la búsqueda

				$.ajax({
					type: "POST",
					url: "buscar.php",
					data: "b=" + consulta,
					dataType: "html",
					beforeSend: function() {
						//imagen de carga
						$("#resultado").html("<p align='center'><img src='ajax-loader.gif' /></p>");
					},
					error: function() {
						alert("error petición ajax");
					},
					success: function(data) {
						document.getElementById("resultado").style.display = "block";
						$("#resultado").empty();
						$("#resultado").append(data);

					}
				});
			});
		});
	</script>

</body>

</html>
 No newline at end of file