由于原因,我想知道将codeigniter url的下划线更改为破折号的最简单的解决方案。
我的控制器看起来像:
public function request_guide() {
...Load view etc...
}
因此,要浏览此页面,我必须转到:
www.domain.com/request_guide
但是我想要更加友好,并使用破折号代替下划线,如下:
www.domain.com/request-guide
我认为codeigniter功能需要下划线(可能是错误的)。
在之前的项目中,我只使用了mod_rewrite,但我相信可以使用路径执行这些操作。
我最简单的方法是用密码重写url替换下划线???
答案 0 :(得分:47)
这实际上取决于你的意图。如果您只想更改一个页面,那么 devrooms '解决方案确实是完美的:
$route['request-guide'] = "request_guide";
但是如果你想把它作为你网站的默认行为,你应该扩展你的核心路由器类(来源: [Using hyphens instead of underscores in CodeIgniter])
将此代码插入其中:
<?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));
}
}
?>
更新(2015年10月26日):在CodeIgniter 3中有更好的方法,正如@Thomas Wood所说:
$route['translate_uri_dashes'] = TRUE;
答案 1 :(得分:28)
中的路线配置
config/routes.php
是你的朋友。
一个简单的
$route['request-guide'] = "request_guide" ;
会为你做这件事。
答案 2 :(得分:28)
答案 3 :(得分:2)
查看Codeigniter的自定义路由http://codeigniter.com/user_guide/general/routing.html
答案 4 :(得分:2)
$route['request-guide'] = "request_guide";
答案 5 :(得分:1)
你可以做的是创建一个自定义钩子(PST ......你需要基本的CodeIgniter技能): 有关CodeIgniter Hooks - Extending the Framework Core的更多信息
/*
* 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']);
}
我将文件命名为 customhooks.php 。
然后将其添加到 application / config :
中的hooks.php文件中$hook['pre_system'] = array(
'class' => '',
'function' => 'prettyurls',
'filename' => 'customhooks.php',
'filepath' => 'hooks',
'params' => array()
);
您需要编辑 application / config / config.php 文件以启用挂钩
$config['enable_hooks'] = TRUE;
<强> EXTRA:强>
这样当您使用 $ this-&gt; uri-&gt; uri_string()时,它会保持连字符执行以下Creating Core System Classes
class MY_URI extends CI_URI {
function uri_string() {
return str_replace('_', '-', $this->uri_string);
}
}
答案 6 :(得分:0)
您可以使用此_remap()方法来处理此类行为。将此方法放在控制器中或创建核心控制器并将其放入。
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();
}