{"id":5367,"date":"2026-01-19T17:31:47","date_gmt":"2026-01-19T16:31:47","guid":{"rendered":"https:\/\/sutilweb.eu\/?page_id=5367"},"modified":"2026-01-19T17:31:48","modified_gmt":"2026-01-19T16:31:48","slug":"51-controladores-en-php","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/php\/php-practico\/51-controladores-en-php\/","title":{"rendered":"51. Controladores en PHP"},"content":{"rendered":"\n<p>Lo que vamos a hacer en este cap\u00edtulo es darle el control de nuestras rutas al controlador, ya que \u00e9ste viene a ser el cerebro de nuestra aplicaci\u00f3n. A partir de este cap\u00edtulo todo va a ser m\u00e1s sencillo.<\/p>\n\n\n\n<p>Lo que vamos a hacer es, dentro de la carpeta <em>app<\/em> vamos a definir una nueva carpeta al que le vamos a dar el nombre Controllers, que es la carpeta donde vamos a definir nuestros <strong>controladores,<\/strong> dentro de esta carpeta <em>app<\/em> tambi\u00e9n vamos a crear la carpeta <em>Models<\/em>, que guarda nuestros modelos.<\/p>\n\n\n\n<p>Hasta ahora el esquema con todas las carpetas y archivos que hemos creado es el siguiente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>app<\/em>\n<ul class=\"wp-block-list\">\n<li><em>Controllers<\/em><\/li>\n\n\n\n<li><em>Models<\/em><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><em>lib<\/em>\n<ul class=\"wp-block-list\">\n<li><em>Route.php<\/em><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><em>public<\/em>\n<ul class=\"wp-block-list\">\n<li><em>css<\/em><\/li>\n\n\n\n<li><em>img<\/em><\/li>\n\n\n\n<li><em>js<\/em><\/li>\n\n\n\n<li><em>.htaccess<\/em><\/li>\n\n\n\n<li><em>index.php<\/em><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><em>routes<\/em>\n<ul class=\"wp-block-list\">\n<li><em>web.php<\/em><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><em>.htaccess<\/em><\/li>\n\n\n\n<li><em>autoload.php<\/em><\/li>\n<\/ul>\n\n\n\n<p>En total 15 entre archivos y carpetas<\/p>\n\n\n\n<p>Lo que necesitamos es crear un controlador para la ruta principal, un controlador&nbsp;para la ruta <em>contact<\/em>, <em>about<\/em>&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Controlador de la ruta principal<\/h2>\n\n\n\n<p>El primer controlador que vamos a crear es el de la ruta principal, al que vamos a llamar <em>HomeController.php<\/em> y lo vamos a incluir dentro de la carpeta <em>Controllers<\/em>, y que va a tener la siguiente sintaxis.<\/p>\n\n\n\n<p><em>Controllers\/HomeController.php<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace App\\Controllers;\n\nclass HomeController {\n  public function index(){\n    \/\/ M\u00e9todo que se encarga de incluir toda la l\u00f3gica necesaria para mostrar contenido\n    return \"Hola desde la p\u00e1gina de inicio\";\n  }\n}<\/code><\/pre>\n\n\n\n<p>Y tambi\u00e9n vamos a modificar&nbsp;<em>Route.php<\/em>.<\/p>\n\n\n\n<p><em>Route.php<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace Lib;\n\nclass Route \n{\n  private static $routes = &#91;];\n\n  \/\/ M\u00e9todo encargado de agregar rutas GET\n  public static function get($uri, $callback){\n    $uri = trim($uri, \"\/\");\n    self::$routes&#91;'GET']&#91;$uri] = $callback;\n  }\n\n  \/\/ M\u00e9todo encargado de agregar rutas POST\n  public static function post($uri, $callback){\n    $uri = trim($uri, \"\/\");\n    self::$routes&#91;'POST']&#91;$uri] = $callback;\n  }\n  \n  \/\/ M\u00e9todo para recuperar la URI y el m\u00e9todo\n  public static function dispatch() {\n    $uri = $_SERVER&#91;'REQUEST_URI'];\n    $uri = trim($uri, \"\/\");\n\n    \/\/ Variable que nos mostrar\u00e1 el m\u00e9todo que hemos utilizado\n    $method = $_SERVER&#91;'REQUEST_METHOD'];\n\n    foreach(self::$routes&#91;$method] as $route => $callback){\n\n      if(strpos($route, ':') !== false){\n        $route = preg_replace('#:&#91;a-zA-Z]+#', '(&#91;a-zA-Z]+)', $route,);\n      }\n\n      if(preg_match(\"#^$route$#\", $uri , $matches)){\n        $params = array_slice($matches, 1);\n        \n        \/\/ $response = $callback(...$params);\n\n\n       if(is_callable($callback)){\n          $response = $callback(...$params);\n        }\n\n        if(is_array($callback)){\n          $controller = new $callback&#91;0];\n          $response = $controller->{$callback&#91;1]}(...$params);\n        }\n\n        if(is_array($response) || is_object($response)){\n          header('Content-Type: application\/json');\n\n          echo json_encode($response);\n        } else {\n          echo $response;\n        }\n\n        return;\n      }\n    }\n    echo \"404 Not Found\";\n  }\n}<\/code><\/pre>\n\n\n\n<p>El pr\u00f3ximo paso que veremos es como traer una vista, la cual viene a ser los documentos HTML que queramos mostrar en nuestra p\u00e1gina.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lo que vamos a hacer en este cap\u00edtulo es darle el control de nuestras rutas al controlador, ya que \u00e9ste [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":4518,"menu_order":50,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-5367","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"Lo que vamos a hacer en este cap\u00edtulo es darle el control de nuestras rutas al controlador, ya que \u00e9ste [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/5367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=5367"}],"version-history":[{"count":3,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/5367\/revisions"}],"predecessor-version":[{"id":5370,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/5367\/revisions\/5370"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/4518"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=5367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}