Skip to content

Instantly share code, notes, and snippets.

@shinigamicorei7
Last active April 11, 2024 22:50
Show Gist options
  • Save shinigamicorei7/8cccbcfc9eb6f234d8d8 to your computer and use it in GitHub Desktop.
Save shinigamicorei7/8cccbcfc9eb6f234d8d8 to your computer and use it in GitHub Desktop.
Routing Basico en PHP

Una de las necesidades más comunes en el desarrollo de Sitios profesionales es implementar URLs amigables, así convertimos algo como /index.php?articulo=1 por algo más cómodo y agradable a la vista del usuario: /blog/introduccion.htm

Para lograr esto existen muchos paquetes, que son altamente recomendables, como:.

En esta clase no buscamos superar a nadie, simplemente quiero demostrarles que puede ser sencillo hasta cierto nivel.

###.htaccess

RewriteEngine On

RewriteCond ${REQUEST_FILENAME} !-f
RewriteCond ${REQUEST_FILENAME} !-d

RewriteRule $(.+)^ index.php?uri=$1 [QSA,L]

###Routing.php

<?php

class Router 
{

    private $_uri = array();
    private $_action = array();

    public function add($uri, $action = null) 
    {
        $this->_uri[] = '/' . trim($uri, '/');

        if ($action != null) 
        {
            $this->_action[] = $action;
        }
    }

    public function run() 
    {
        $uriGet = isset($_GET['uri']) ? '/' . $_GET['uri'] : '/';
        
        foreach ($this->_uri as $key => $value) 
        {
            if (preg_match("#^$value$#", $uriGet)) 
            {
                $action = $this->_action[$key];
                $this->runAction($action);
            }
        }
    }

    private function runAction($action) 
    {
        if($action instanceof \Closure)
        {
            $action();
        }  
        else 
        {
            $params = explode('@', $action);
            $obj = new $params[0];
            $obj->{$params[1]}();
        }
    }

}
?>

###index.php

<?php

require 'Routing.php';
require 'Control/HomeController.php';

$router = new Routing();

$router->add('/',function(){
  echo "Hola Mundo - Esta es una ruta simple";
});

//de esta manera llamamos una funcion dentro de una clase
//class @ method
$router->add('/home','HomeController@showHome');

$router->add('/about','HomeController@showAbout');

$router->run();

?>

###HomeController.php

<?php

class HomeController {
  
  //HomeController@showHome
  public function showHome(){
    return "Hola mundo - Asi llamo una funcion dentro de un controllador";
  }
  
  //HomeController@showAbout
  public function showAbout(){
    return "Hola mundo - Asi llamo una funcion dentro de un controllador";
  }  

}

?>

Que Viva el Software Libre :D

@Zekard92
Copy link

Hola,

noté que estas utilizanso MD para los encabezados de tercer nivel, dejando el título pegado a los gatos ("#").
para que estos se denoten correctamente se tiene que mantener un espacio entre estos
###.htaccess -> ### .htaccess
y la diferencia es la siguiente:

.htaccess

Saludos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment