{"id":257,"date":"2014-08-31T13:34:52","date_gmt":"2014-08-31T11:34:52","guid":{"rendered":"http:\/\/luismaseda.com\/wp\/?p=257"},"modified":"2016-02-06T13:36:55","modified_gmt":"2016-02-06T11:36:55","slug":"primera-pagina-con-codeigniter","status":"publish","type":"post","link":"https:\/\/luismaseda.com\/wp\/?p=257","title":{"rendered":"Primera p\u00e1gina con CodeIgniter"},"content":{"rendered":"<h1>Modificaciones en application\\config<\/h1>\n<div class=\"su-tabs su-tabs-style-default su-tabs-mobile-stack\" data-active=\"4\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-tabs-nav\"><span class=\"\" data-url=\"\" data-target=\"blank\" tabindex=\"0\" role=\"button\">database.php<\/span><span class=\"\" data-url=\"\" data-target=\"blank\" tabindex=\"0\" role=\"button\">autoload.php<\/span><span class=\"\" data-url=\"\" data-target=\"blank\" tabindex=\"0\" role=\"button\">routes.php<\/span><span class=\"\" data-url=\"\" data-target=\"blank\" tabindex=\"0\" role=\"button\">config.php<\/span><\/div><div class=\"su-tabs-panes\"><div class=\"su-tabs-pane su-u-clearfix su-u-trim\" data-title=\"database.php\"><\/p>\n<pre>...\r\n$db['default']['hostname'] = '<strong><span style=\"color: #0000ff;\">localhost<\/span><\/strong>';\r\n$db['default']['username'] = '<strong><span style=\"color: #0000ff;\">root<\/span><\/strong>';\r\n$db['default']['password'] = '';\r\n$db['default']['database'] = '<strong><span style=\"color: #0000ff;\">aem<\/span><\/strong>';\r\n$db['default']['dbdriver'] = 'mysql';\r\n$db['default']['dbprefix'] = '';\r\n$db['default']['pconnect'] = TRUE;\r\n$db['default']['db_debug'] = TRUE;\r\n$db['default']['cache_on'] = FALSE;\r\n$db['default']['cachedir'] = '';\r\n$db['default']['char_set'] = 'utf8';\r\n$db['default']['dbcollat'] = 'utf8_general_ci';\r\n$db['default']['swap_pre'] = '';\r\n$db['default']['autoinit'] = TRUE;\r\n$db['default']['stricton'] = FALSE;\r\n...\r\n<\/pre>\n<p><\/div>\n<div class=\"su-tabs-pane su-u-clearfix su-u-trim\" data-title=\"autoload.php\"><\/p>\n<pre>...\r\n$autoload['libraries'] = array('<strong><span style=\"color: #0000ff;\">database<\/span><\/strong>');\r\n...\r\n<\/pre>\n<p><\/div>\n<div class=\"su-tabs-pane su-u-clearfix su-u-trim\" data-title=\"routes.php\"><\/p>\n<pre>...\r\n$route['default_controller'] = \"<strong><span style=\"color: #0000ff;\">Torneos<\/span><\/strong>\";\r\n...\r\n<\/pre>\n<p><\/div>\n<div class=\"su-tabs-pane su-u-clearfix su-u-trim\" data-title=\"config.php\"><\/p>\n<pre>...\r\n$config['base_url'] = '<strong><span style=\"color: #0000ff;\">http:\/\/localhost\/aem3<\/span><\/strong>';\r\n...\r\n<\/pre>\n<p><\/div><\/div><\/div>\n<h1>P\u00e1ginas del modelo MVC<\/h1>\n<div class=\"su-tabs su-tabs-style-default su-tabs-mobile-stack\" data-active=\"1\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-tabs-nav\"><span class=\"\" data-url=\"\" data-target=\"blank\" tabindex=\"0\" role=\"button\">controllers\/torneos.php<\/span><span class=\"\" data-url=\"\" data-target=\"blank\" tabindex=\"0\" role=\"button\">views\/home.php<\/span><span class=\"\" data-url=\"\" data-target=\"blank\" tabindex=\"0\" role=\"button\">models\/torneo_model.php<\/span><\/div><div class=\"su-tabs-panes\"><div class=\"su-tabs-pane su-u-clearfix su-u-trim\" data-title=\"controllers\/torneos.php\"><\/p>\n<pre>&lt;?php\r\nclass Torneos extends CI_Controller {\r\n   function index(){\r\n      \/\/cargo el helper de url, con funciones para trabajo con URL del sitio\r\n      $this-&gt;load-&gt;helper('url');\r\n\r\n      \/\/cargo el modelo de art\u00edculos\r\n      $this-&gt;load-&gt;model('Torneo_model');\r\n\r\n      \/\/pido los ultimos torneos al modelo\r\n      $ultimosTorneos = $this-&gt;Torneo_model-&gt;dame_ultimos_torneos();\r\n\r\n      \/\/creo el array con datos de configuraci\u00f3n para la vista\r\n      $datos_vista = array('rs_torneos' =&gt; $ultimosTorneos);\r\n\r\n      \/\/cargo la vista pasando los datos de configuacion\r\n      $this-&gt;load-&gt;view('home', $datos_vista);\r\n   }\r\n}\r\n?&gt;\r\n<\/pre>\n<p><\/div>\n<div class=\"su-tabs-pane su-u-clearfix su-u-trim\" data-title=\"views\/home.php\"><\/p>\n<pre>&lt;html&gt;\r\n&lt;head&gt;\r\n  &lt;meta charset=\"UTF-8\" \/&gt;\r\n  &lt;title&gt;Portada de mi sitio&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;h1&gt;Bienvenido a mi web&lt;\/h1&gt;\r\n&lt;p&gt;Estos son los &amp;uacute;ltimos torneos publicados.&lt;\/p&gt;\r\n&lt;?php\r\nwhile ($fila = mysql_fetch_array($rs_torneos)){\r\n   echo '&lt;p&gt;';\r\n   echo '&lt;a href=\"' . site_url('\/torneos\/muestra\/' . $fila['cdgo_torneo']) . '\"&gt;' . $fila['nombre_torneo'] . '&lt;\/a&gt;';\r\n   echo '&lt;\/p&gt;';\r\n}\r\n?&gt;\r\n\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p><\/div>\n<div class=\"su-tabs-pane su-u-clearfix su-u-trim\" data-title=\"models\/torneo_model.php\"><\/p>\n<pre>&lt;?php\r\nclass Torneo_model extends CI_Model {\r\n\r\n   function __construct(){\r\n      parent::__construct();\r\n   }\r\n\r\n   function dame_ultimos_torneos(){\r\n      $ssql = \"select * from tabla_torneos order by cdgo_torneo desc limit 10\";\r\n      return mysql_query($ssql);\r\n   }\r\n}\r\n?&gt;\r\n<\/pre>\n<p><\/div><\/div><\/div>\n<p>&nbsp;<\/p>\n<div class=\"su-box su-box-style-soft\" id=\"\" style=\"border-color:#000000;border-radius:6px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#333333;color:#FFFFFF;border-top-left-radius:4px;border-top-right-radius:4px\">controllers\/torneos.php<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:4px;border-bottom-right-radius:4px\"><\/p>\n<pre>&lt;?php\r\nclass Torneos extends CI_Controller {\r\n   function index(){\r\n      \/\/cargo el helper de url, con funciones para trabajo con URL del sitio\r\n      $this-&gt;load-&gt;helper('url');\r\n\r\n      \/\/cargo el modelo de art\u00edculos\r\n      $this-&gt;load-&gt;model('Torneo_model');\r\n\r\n      \/\/pido los ultimos torneos al modelo\r\n      $ultimosTorneos = $this-&gt;Torneo_model-&gt;dame_ultimos_torneos();\r\n\r\n      \/\/creo el array con datos de configuraci\u00f3n para la vista\r\n      $datos_vista = array('rs_torneos' =&gt; $ultimosTorneos);\r\n\r\n      \/\/cargo la vista pasando los datos de configuacion\r\n      $this-&gt;load-&gt;view('home', $datos_vista);\r\n   }\r\n}\r\n?&gt;\r\n<\/pre>\n<p><\/div><\/div>\n<p>Un controlador en CodeIgniter es un archivo que contiene el c\u00f3digo de una clase, de programaci\u00f3n orientada a objetos, que colocamos en un directorio espec\u00edfico del esquema de carpetas de nuestro sitio. Tiene un nombre cualquiera, que se asociar\u00e1 con una URL de nuestra aplicaci\u00f3n web.<\/p>\n<p>Por ejemplo, esta podr\u00eda ser una URL de nuestra aplicaci\u00f3n:<\/p>\n<p>midominio.com\/index.php\/torneos<\/p>\n<p>En la URL anterior podemos ver que la palabra \u00abtorneos\u00bb determina la p\u00e1gina que queremos ver dentro de nuestra aplicaci\u00f3n. Pues bien, para poder atender esta solicitud nosotros vamos a tener que crear un archivo llamado torneos.php (el controlador) dentro del directorio que aloja los controladores de nuestra aplicaci\u00f3n.<\/p>\n<p>Por tanto, cuando CodeIgniter detecta una URL como esta, intentar\u00e1 acceder al archivo articulos.php, para cargarlo, procesarlo y de ese modo mostrar la p\u00e1gina con los contenidos de esta secci\u00f3n.<\/p>\n<p>Cuando ese controlador no se encuentre entre los archivos de controladores de CodeIgniter, simplemente se mostrar\u00e1 un error 404 de p\u00e1gina no encontrada. Si se encontr\u00f3 el controlador, como se dec\u00eda, se carga y se procesa para mostrar la p\u00e1gina.<\/p>\n<p>Los controladores en CodeIgniter se guardan en la carpeta \u00absystem\/application\/controllers\/\u00bb, que se encuentra dentro de los archivos de CodeIgniter.<\/p>\n<h1>Analizando el controlador<\/h1>\n<ul>\n<li>En nombre del archivo de controlador, en este caso torneos.php, va en min\u00fasculas.<\/li>\n<li>El nombre de la clase que implementa el controlador se tiene que llamar igual que el nombre del archivo, pero fijaros que tiene obligatoriamente la primera letra en may\u00fascula. Por eso aparece como class Articulo extends Controller.<\/li>\n<li>Todos los controladores tienen que extender la clase \u00abController\u00bb (que tambi\u00e9n tiene la primera letra \u00abC\u00bb en may\u00fascula), que est\u00e1 creada dentro de CodeIgniter y en principio no necesitamos modificarla para nada.<\/li>\n<\/ul>\n<p>Una vez creado el archivo, podemos acceder con el navegador al controlador, con una URL como esta:<\/p>\n<p>http:\/\/luismaseda.com\/aem3\/index.php\/torneos<\/p>\n<p>Un momento \u00bfQu\u00e9 significa extender una clase?<\/p>\n<p>class Torneos extends CI_Controller<\/p>\n<p>Frecuentemente son necesarias clases con variables y funciones semejantes a los de otra clase ya existente. De hecho, es una buena pr\u00e1ctica definir una clase gen\u00e9rica que pueda ser utilizada en todos sus proyectos y adaptar esta clase a las necesidades de cada uno de sus proyectos espec\u00edficos.<\/p>\n<p>Para facilitar esto, las clases pueden ser extensiones de otras clases. La clase extendida (Torneos) tiene todas las variables y funciones de la clase base (CI_Controller) y aquello que se agregue en la definici\u00f3n extendida (Torneos). No es posible disminuir una clase, es decir, remover la definici\u00f3n de cualquier funci\u00f3n o variable existente. Una clase extendida siempre es dependiente de una s\u00f3la clase base, es decir, la herencia m\u00faltiple no est\u00e1 soportada. Las clases son extendidas utilizando la palabra clave &#8216;extends&#8217;.<\/p>\n<p>En el caso de class Torneos extends CI_Controller se define una clase llamada Torneos que contiene todas las variables y funciones de CI_Controller m\u00e1s una funci\u00f3n adicional $index().<\/p>\n<p>Hemos colocado una funci\u00f3n index(), que es la que se llamar\u00e1 cuando se acceda a este controlador tal cual. Dentro de index estamos invocando una vista.<\/p>\n<p>Nota:<br \/>\n\u00a1Las clases deben de estar definidas antes de ser utilizadas! Si se desea que la clase Torneos extienda a la clase CI_Controller, se tendr\u00e1 que definir primero la clase CI_Controller. Si se quiere crear otra clase llamada Calendario basada en la clase Torneos se tiene que definir primero Torneos.<\/p>\n<p>Resumiendo: el orden en que las clases se definen es importante.<\/p>\n<p>Controlador por defecto<\/p>\n<p>Hay que hablar sobre el controlador por defecto, que es el que se invoca en CodeIgniter cuando no se especifica ning\u00fan nombre de directorio y por tanto ning\u00fan controlador, en la siguiente URL:<br \/>\nmidomino.com\/index.php\/<\/p>\n<p>O bien en esta otra:<\/p>\n<p>midominio.com\/<\/p>\n<p>Esto, que ser\u00eda la home de la aplicaci\u00f3n CodeIgniter, y eventualmente la home del dominio, si es que hemos instalado el framework en la ra\u00edz del directorio de publicaci\u00f3n, invoca tambi\u00e9n un controlador, que es el controlador por defecto.<\/p>\n<p>El nombre del controlador predeterminado (Default Controller) puede ser variable, siendo el desarrollador el encargado de configurarlo en uno de los archivos de configuraci\u00f3n de CodeIgniter, que se encuentra en el fichero \u00abapplication\/config\/routes.php\u00bb.<\/p>\n<p>En ese archivo simplemente tenemos que buscar el valor $route[&#8216;default_controller&#8217;] y asignarle el nombre de la clase donde est\u00e1 el controlador que queramos que se invoque. Como es el nombre de una clase de un controlador tendremos que escribirlo con la primera letra en may\u00fascula.<\/p>\n<p>$route[&#8216;default_controller&#8217;] = &#8216;Torneos&#8217;;<\/p>\n<p>Si observamos el valor de esta variable de configuraci\u00f3n, tal como est\u00e1 en el momento inicial, despu\u00e9s de la instalaci\u00f3n de CodeIgniter, veremos que el controlador por defecto est\u00e1 en la clase \u00abWelcome\u00bb, archivo application\/controllers\/welcome.php<\/p>\n<p>Ahora, si ponemos la siguiente URL en nuestro navegador<\/p>\n<p>http:\/\/luismaseda.com\/aem3\/<\/p>\n<p>tendr\u00e1 el mismo funcionamiento que poniendo:<\/p>\n<p>http:\/\/luismaseda.com\/aem3\/index.php\/torneos<\/p>\n<p>Importante: Estamos diciendo que los controladores tienen funciones, pero en realidad deber\u00edamos llamarles m\u00e9todos, porque los controladores son clases y las clases tienen m\u00e9todos y no funciones.<\/p>\n<hr \/>\n<div class=\"su-box su-box-style-soft\" id=\"\" style=\"border-color:#000000;border-radius:6px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#333333;color:#FFFFFF;border-top-left-radius:4px;border-top-right-radius:4px\">views\/home.php<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:4px;border-bottom-right-radius:4px\"><\/p>\n<pre>&lt;html&gt;\r\n&lt;head&gt;\r\n  &lt;meta charset=\"UTF-8\" \/&gt;\r\n  &lt;title&gt;Portada de mi sitio&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;h1&gt;Bienvenido a mi web&lt;\/h1&gt;\r\n&lt;p&gt;Estos son los &amp;uacute;ltimos torneos publicados.&lt;\/p&gt;\r\n&lt;?php\r\nwhile ($fila = mysql_fetch_array($rs_torneos)){\r\n   echo '&lt;p&gt;';\r\n   echo '&lt;a href=\"' . site_url('\/torneos\/muestra\/' . $fila['cdgo_torneo']) . '\"&gt;' . $fila['nombre_torneo'] . '&lt;\/a&gt;';\r\n   echo '&lt;\/p&gt;';\r\n}\r\n?&gt;\r\n\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n\r\n<\/pre>\n<p><\/div><\/div>\n<p>Los controladores deciden qu\u00e9 hacer cuando se recibe una solicitud y las vistas deciden c\u00f3mo mostrar los resultados. Por decirlo de otra forma, la l\u00f3gica de nuestra aplicaci\u00f3n residir\u00e1 en el controlador y la vista mantendr\u00e1 el aspecto de nuestra p\u00e1gina, el dise\u00f1o de la p\u00e1gina que se mostrar\u00e1 al usuario.<\/p>\n<p>Una vista se carga en el controlador mediante:<\/p>\n<p>$this-&gt;load-&gt;view(&#8216;nombreDeLaVista&#8217;);<\/p>\n<p>En &#8216;nombreDeLaVista&#8217; tendremos que indicar el nombre del archivo donde hemos guardado la vista, pero sin el \u00ab.php\u00bb. En nuestro controlador se hizo mediante:<\/p>\n<p>$this-&gt;load-&gt;view(&#8216;home&#8217;, $datos_vista);<\/p>\n<p>en la que tambi\u00e9n se carg\u00f3 una variable con datos para ser utilizados por la vista: $datos_vista<\/p>\n<p>Podemos ver c\u00f3mo hacemos un recorrido a los registros de \u00faltimos torneos tra\u00eddos desde la base de datos con ayuda del modelo y enviados a la vista por medio del controlador. Adem\u00e1s, vemos que se est\u00e1 utilizando la funci\u00f3n site_url() que pertenece al helper \u00aburl\u00bb que hab\u00edamos cargado en el controlador.<\/p>\n<p>El resultado nos muestra los \u00faltimos torneos que se hab\u00edan cargados en la base de datos, en la tabla_torneos, con un enlace a varias p\u00e1ginas, donde se muestra cada uno de los torneos (no creadas todav\u00eda).<\/p>\n<div class=\"su-box su-box-style-soft\" id=\"\" style=\"border-color:#000000;border-radius:6px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#333333;color:#FFFFFF;border-top-left-radius:4px;border-top-right-radius:4px\">models\/torneo_model.php<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:4px;border-bottom-right-radius:4px\"><\/p>\n<pre>&lt;?php\r\nclass Torneo_model extends CI_Model {\r\n\r\n   function __construct(){\r\n      parent::__construct();\r\n   }\r\n\r\n   function dame_ultimos_torneos(){\r\n      $ssql = \"select * from tabla_torneos order by cdgo_torneo desc limit 10\";\r\n      return mysql_query($ssql);\r\n   }\r\n}\r\n?&gt;\r\n<\/pre>\n<p><\/div><\/div>\n<p>Los modelos en el MVC son los m\u00f3dulos que tienen como responsabilidad el acceso y control de los datos que hay en bases de datos y mantienen encapsuladas todas las particularidades y complejidades de los accesos a las tablas para realizar cualquier tipo de operaci\u00f3n.<\/p>\n<p>En el patr\u00f3n MVC, los modelos son una de las partes fundamentales, pero en el caso de CodeIgniter, su uso es s\u00f3lo opcional. El desarrollador es el responsable de decidir si le viene bien el uso de los modelos o si prefiere realizar sus aplicaciones haciendo cualquier tipo de operaci\u00f3n sobre la base de datos en los propios controladores.<\/p>\n<p>Los modelos en la pr\u00e1ctica son clases, de programaci\u00f3n orientada a objetos, que tienen sus m\u00e9todos o funciones, a los que se puede invocar desde los controladores para hacer operaciones con la base de datos.<\/p>\n<p>Los modelos en CodeIgniter se construyen extendiendo la clase CI_Model y tenemos que nombrarlos con la primera letra en may\u00fasculas. Dentro del modelo que estamos creando tenemos que definir obligatoriamente un constructor, donde tenemos que hacer una llamada al constructor de la clase de la que hereda (clase parent, llamada __construct).<\/p>\n<p>function __construct(){<br \/>\nparent::__construct();<br \/>\n}<\/p>\n<p>Un modelo se carga en el controlador mediante:<\/p>\n<p>$this-&gt;load-&gt;model(&#8216;Nombre_model&#8217;);<\/p>\n<p>Si queremos cargar varios modelos de una sola vez, podemos hacerlo pasando un array con todos los modelos que deseamos cargar:<\/p>\n<p>$this-&gt;load-&gt;model(array(&#8216;Torneo_model&#8217;,&#8217;Noticia_model&#8217;));<\/p>\n<p>En nuestro controlador se hizo mediante:<\/p>\n<p>$this-&gt;load-&gt;model(&#8216;Torneo_model&#8217;);<\/p>\n<p>Una vez cargado un modelo, sus m\u00e9todos para el acceso a los datos estar\u00e1n disponibles en nuestro controlador, a trav\u00e9s del propio objeto controlador, el nombre del modelo que queremos accionar y la funci\u00f3n que queremos invocar dentro del modelo.<\/p>\n<p>$this-&gt;load-&gt;model-&gt;funcion_del_modelo();<\/p>\n<div class=\"su-box su-box-style-soft\" id=\"\" style=\"border-color:#000000;border-radius:6px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#333333;color:#FFFFFF;border-top-left-radius:4px;border-top-right-radius:4px\">database.php<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:4px;border-bottom-right-radius:4px\"><\/p>\n<pre>...\r\n$db['default']['hostname'] = '<strong><span style=\"color: #0000ff;\">localhost<\/span><\/strong>';\r\n$db['default']['username'] = '<strong><span style=\"color: #0000ff;\">root<\/span><\/strong>';\r\n$db['default']['password'] = '';\r\n$db['default']['database'] = '<strong><span style=\"color: #0000ff;\">aem<\/span><\/strong>';\r\n$db['default']['dbdriver'] = 'mysql';\r\n$db['default']['dbprefix'] = '';\r\n$db['default']['pconnect'] = TRUE;\r\n$db['default']['db_debug'] = TRUE;\r\n$db['default']['cache_on'] = FALSE;\r\n$db['default']['cachedir'] = '';\r\n$db['default']['char_set'] = 'utf8';\r\n$db['default']['dbcollat'] = 'utf8_general_ci';\r\n$db['default']['swap_pre'] = '';\r\n$db['default']['autoinit'] = TRUE;\r\n$db['default']['stricton'] = FALSE;\r\n...\r\n<\/pre>\n<p><\/div><\/div>\n<div class=\"su-box su-box-style-soft\" id=\"\" style=\"border-color:#000000;border-radius:6px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#333333;color:#FFFFFF;border-top-left-radius:4px;border-top-right-radius:4px\">autoload.php<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:4px;border-bottom-right-radius:4px\"><\/p>\n<pre>...\r\n$autoload['libraries'] = array('<strong><span style=\"color: #0000ff;\">database<\/span><\/strong>');\r\n...\r\n<\/pre>\n<p><\/div><\/div>\n<div class=\"su-box su-box-style-soft\" id=\"\" style=\"border-color:#000000;border-radius:6px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#333333;color:#FFFFFF;border-top-left-radius:4px;border-top-right-radius:4px\">routes.php<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:4px;border-bottom-right-radius:4px\"><\/p>\n<pre>...\r\n$route['default_controller'] = \"<strong><span style=\"color: #0000ff;\">Torneos<\/span><\/strong>\";\r\n...\r\n<\/pre>\n<p><\/div><\/div>\n<div class=\"su-box su-box-style-soft\" id=\"\" style=\"border-color:#000000;border-radius:6px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#333333;color:#FFFFFF;border-top-left-radius:4px;border-top-right-radius:4px\">config.php<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:4px;border-bottom-right-radius:4px\"><\/p>\n<pre>...\r\n$config['base_url'] = '<strong><span style=\"color: #0000ff;\">http:\/\/localhost\/aem3<\/span><\/strong>';\r\n...\r\n<\/pre>\n<p><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Modificaciones en application\\config P\u00e1ginas del modelo MVC &nbsp; Un controlador en CodeIgniter es un archivo que contiene el c\u00f3digo de una clase, de programaci\u00f3n orientada a objetos, que colocamos en un directorio espec\u00edfico del esquema de carpetas de nuestro sitio. &hellip; <a href=\"https:\/\/luismaseda.com\/wp\/?p=257\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[41,1],"tags":[],"class_list":["post-257","post","type-post","status-publish","format-standard","hentry","category-codeigniter","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/257","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=257"}],"version-history":[{"count":51,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/257\/revisions"}],"predecessor-version":[{"id":405,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/257\/revisions\/405"}],"wp:attachment":[{"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=257"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}