site_url reemplazar caracteres php codeigniter url-rewriting

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 - .

Documentation



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] )

  1. Cree un nuevo archivo en ''application / core'' y asígnele el nombre ''MY_Router.php''
  2. 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";