【问题标题】:How to remove all controller names from url in codeigniter如何从codeigniter中的url中删除所有控制器名称
【发布时间】:2016-03-25 01:22:11
【问题描述】:
我在 Codeigniter 项目中有多个控制器。我需要隐藏这些控制器名称。例如:我有两个控制器,家庭和学校。每所学校都有自己的页面,包括关于、画廊、联系方式等,网址应为http://www.sitename.com/schoolname。我使用 routes.php 隐藏家庭控制器。
$route['(:any)'] = 'home/$1';
但它在学校控制器中显示错误。请帮帮我.....谢谢。
【问题讨论】:
标签:
php
codeigniter
codeigniter-2
【解决方案1】:
绝对需要控制器名称是不正确的。
在routes.php中首先定义默认控制器为home(当用户访问主页sitename.com时)
$route['default_controller'] = 'home';
然后你创建任何其他页面应该重定向到school控制器的规则:
$route['.*'] = 'school';
现在home.php 控制器将如下所示:
class Home extends CI_Controller {
public function Index()
{
echo "This is the homepage";
}
}
在school.php 控制器中,您必须从请求的 URL 中手动获取学校的名称:
class School extends CI_Controller {
public function _remap()
{
echo "User requested school: " . $this->uri->segment(1);
}
}
为什么要使用_remap 方法?因为无论 URL 或路由中的内容如何,每次都会调用它。
来自the docs:
如果你的控制器包含一个名为 _remap() 的方法,无论你的 URI 包含什么,它都会被调用。
【解决方案2】:
试试这个
$route['anything you want/(:any)'] = 'home/$1';
控制器名称是必需的,因此请使用您想要的任何名称来设置它