Codeigniter 2 Controller Fall Through 到另一个控制器
Codeigniter 2 Controller Fall Through to a different controller
我正在开发的网站有一个 URL 结构,如下所示:
example.com/category-name
这目前转到一个名为页面的 1000 行长控制器,该控制器是几年前构建的,并且从未更改过。我在上面的路线中插入一个新控制器,如下所示:
$route['(:any)'] = 'new_controller/load/
$route['default_controller'] = "pages";
new_controller
的想法是这样工作的:
example.com/page-name
这会在数据库中查找 page-name
并在网站的管理员中显示业务人员制作的一些文本。
问题在于,如果在此 table 中找不到 page-name
,出于遗留目的,我必须完成 new_controller/load
,然后正常使用页面控制器。
出于 SEO 的原因,我无法更改 URL 结构,它必须保留 example.com/category-name
并且他们希望它共享相同的 URL 结构 example.com/page-name
因为它更短(我试图说服他们做类似 example.com/page/page-name
的事情)
从 new_controller/load/
我怎么打电话说 pages/view/
?
提前致谢,它将真正节省我的工作时间哈哈
在您的 route config
中,您可以使用下面的配置。 new_controller 控制器处理所有页面请求,只要它们的 uris 不包含 pages
控制器处理的 pages/view/.*
。
$route['pages\/view\/(.*)'] = 'pages/view/';
$route['(?!pages\/view)(.*)'] = 'new_controller/load/';
在 new_controller
控制器中 - 您可以执行类似下面代码的操作,因此如果数据库中不存在 slug,它将由 pages
控制器处理。
public function load($slug)
{
if(/*slug in database*/){
echo "Slug content from database";
}
else { // slug not in database
redirect(site_url('pages/view/'.$slug)); // You can use this
echo file_get_contents(site_url('pages/view/'.$slug)); // or this
$this->load->view('pages_template'); // or this
// or semething else.
}
}
我正在开发的网站有一个 URL 结构,如下所示:
example.com/category-name
这目前转到一个名为页面的 1000 行长控制器,该控制器是几年前构建的,并且从未更改过。我在上面的路线中插入一个新控制器,如下所示:
$route['(:any)'] = 'new_controller/load/
$route['default_controller'] = "pages";
new_controller
的想法是这样工作的:
example.com/page-name
这会在数据库中查找 page-name
并在网站的管理员中显示业务人员制作的一些文本。
问题在于,如果在此 table 中找不到 page-name
,出于遗留目的,我必须完成 new_controller/load
,然后正常使用页面控制器。
出于 SEO 的原因,我无法更改 URL 结构,它必须保留 example.com/category-name
并且他们希望它共享相同的 URL 结构 example.com/page-name
因为它更短(我试图说服他们做类似 example.com/page/page-name
的事情)
从 new_controller/load/
我怎么打电话说 pages/view/
?
提前致谢,它将真正节省我的工作时间哈哈
在您的 route config
中,您可以使用下面的配置。 new_controller 控制器处理所有页面请求,只要它们的 uris 不包含 pages
控制器处理的 pages/view/.*
。
$route['pages\/view\/(.*)'] = 'pages/view/';
$route['(?!pages\/view)(.*)'] = 'new_controller/load/';
在 new_controller
控制器中 - 您可以执行类似下面代码的操作,因此如果数据库中不存在 slug,它将由 pages
控制器处理。
public function load($slug)
{
if(/*slug in database*/){
echo "Slug content from database";
}
else { // slug not in database
redirect(site_url('pages/view/'.$slug)); // You can use this
echo file_get_contents(site_url('pages/view/'.$slug)); // or this
$this->load->view('pages_template'); // or this
// or semething else.
}
}