php - caracteres - ¿Cómo reemplazar los guiones bajos en url codeigniter con guiones?
reemplazar caracteres php (8)
Abre aplicación / config / route.php y cambia
$route[''translate_uri_dashes''] = TRUE;
Eso es lo que necesitas hacer.
Ahora, cuando acceda a www.domain.com/ request-guide , se instanciará el controlador request_guide .
Funcionará con todos los controladores cuyo nombre contenga _ (guión bajo).
Me gustaría saber la solución más sencilla para cambiar los guiones bajos de las URL de mi codeigniter a guiones, por varias razones.
Mis controladores se ven como:
public function request_guide() {
...Load view etc...
}
Así que para navegar a esta página tendría que ir a:
www.domain.com/request_guide
Pero quiero ser más amigable y usar guiones en lugar de guiones bajos, así:
www.domain.com/request-guide
Tengo la impresión de que las funciones de codeigniter requieren guiones bajos (podría ser incorrecto).
En proyectos anteriores, simplemente he usado mod_rewrite pero creo que estas acciones se pueden realizar utilizando rutas.
¿Cuál es la forma más fácil para que reescriba las urls reemplazando los guiones bajos con guiones?
Code Ignitor 3 lo tiene incorporado:
$route[''translate_uri_dashes''] = FALSE;
Simplemente cambie a TRUE
y puede usar _
o -
.
Eche un vistazo al enrutamiento personalizado de Codeigniter http://codeigniter.com/user_guide/general/routing.html
La configuración de rutas encontrada en
config/routes.php
es tu amigo aqui
Un simple
$route[''request-guide''] = "request_guide" ;
Hará esto por ti.
Lo que podría hacer es crear un enlace personalizado (PST ... necesita conocimientos básicos de CodeIgniter): para obtener más información sobre los enlaces de CodeIgniter - Ampliación del núcleo de Framework
/*
* the hooks must be enabled from the config file
* replace underscore with dashes (hyphens) for SEO
*/
function prettyurls() {
if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), ''/'') != '''') {
$newkey = str_replace(''-'', ''_'', key($_GET));
$_GET[$newkey] = $_GET[key($_GET)];
unset($_GET[key($_GET)]);
}
if (isset($_SERVER[''PATH_INFO'']))
$_SERVER[''PATH_INFO''] = str_replace(''-'', ''_'', $_SERVER[''PATH_INFO'']);
if (isset($_SERVER[''QUERY_STRING'']))
$_SERVER[''QUERY_STRING''] = str_replace(''-'', ''_'', $_SERVER[''QUERY_STRING'']);
if (isset($_SERVER[''ORIG_PATH_INFO'']))
$_SERVER[''ORIG_PATH_INFO''] = str_replace(''-'', ''_'', $_SERVER[''ORIG_PATH_INFO'']);
if (isset($_SERVER[''REQUEST_URI'']))
$_SERVER[''REQUEST_URI''] = str_replace(''-'', ''_'', $_SERVER[''REQUEST_URI'']);
}
Nombré el archivo customhooks.php .
Luego agregue esto al archivo hooks.php en application / config :
$hook[''pre_system''] = array(
''class'' => '''',
''function'' => ''prettyurls'',
''filename'' => ''customhooks.php'',
''filepath'' => ''hooks'',
''params'' => array()
);
Necesitará editar su aplicación / config / config.php para habilitar los enlaces
$config[''enable_hooks''] = TRUE;
EXTRA:
para que cuando use $ this-> uri-> uri_string () permanezca dividido en un guión, haga lo siguiente: Crear clases del sistema principal
class MY_URI extends CI_URI {
function uri_string() {
return str_replace(''_'', ''-'', $this->uri_string);
}
}
Puede usar este método _remap () para manejar dicho comportamiento. Coloque este método en sus controladores o cree un controlador central y colóquelo en.
public function _remap($method, $params = array()){
if(method_exists($this, $method)){
return call_user_func_array(array($this, $method), $params);
}else{
$method = str_replace("-", "_", $method);
if(method_exists($this, $method)){
return call_user_func_array(array($this, $method), $params);
}
}
show_404();
}
Realmente depende de tu intención. Si solo desea cambiar una sola página, entonces la solución de Devrooms es la perfecta:
$route[''request-guide''] = "request_guide";
Pero si desea que este sea el comportamiento predeterminado de su sitio web, debe ampliar su clase de enrutador central de esta manera (fuente: [Uso de guiones en lugar de guiones bajos en CodeIgniter] )
- Cree un nuevo archivo en ''application / core'' y asígnele el nombre ''MY_Router.php''
Inserte este código en él:
<?php defined(''BASEPATH'') || exit(''No direct script access allowed''); class MY_Router extends CI_Router { function _set_request ($seg = array()) { // The str_replace() below goes through all our segments // and replaces the hyphens with underscores making it // possible to use hyphens in controllers, folder names and // function names parent::_set_request(str_replace(''-'', ''_'', $seg)); } } ?>
ACTUALIZACIÓN (26 de octubre de 2015) : Hay una mejor manera de hacerlo en CodeIgniter 3, como lo mencionó @Thomas Wood:
$route[''translate_uri_dashes''] = TRUE;
$route[''request-guide''] = "request_guide";