Zab*_*abs 2 php codeigniter codeigniter-routing
我正在创建一个网站,其中有很多路由需要添加到路径文件(800+) - 显然我不想手动将这些路由逐个添加到路由配置文件中.
任何人都可以建议最佳做法让我的路由从数据库自动加载.是否有合适的库/帮助程序将执行适用于2.x版本的此任务
例如..
$route['apple'] = 'brands/index';
$route['blackberry'] = 'brands/index';
$route['htc'] = 'brands/index';
$route['samsung'] = 'brands/index';
Run Code Online (Sandbox Code Playgroud)
这些只是我要添加到路线中的几个品牌 - 但是有数百个,所以我想从数据库加载而不是手动输入这些.另外 - 这种方法会有什么影响从数据库加载它们的现场性能?
我正在使用Codeigniter v2.1.3
小智 10
如果你通过application/config/routes.php文件中的数据库调用不断查询数据库(在每个页面加载),那么我想会对性能产生很大的影响.
我建议(以及我之前完成此操作的方式)是在routes.php文件底部包含以下行,并将所有路由保存到缓存文件夹routes.php中的文件.
require_once APPPATH . 'cache/routes.php';
Run Code Online (Sandbox Code Playgroud)
然后,您可以将所有结果写入缓存文件(使用CI的文件助手),其功能类似于以下内容:
public function save_routes() {
$routes = $this->routes_model->get_all_routes();
$data = array();
if (!empty($routes )) {
$data[] = '<?php if ( ! defined(\'BASEPATH\')) exit(\'No direct script access allowed\');';
foreach ($routes as $route) {
$data[] = '$route[\'' . $route['uri'] . '\'] = \'' . $route['controller'] . '/' . $route['action'] . '\';';
}
$output = implode("\n", $data);
write_file(APPPATH . 'cache/routes.php', $output);
}
}
Run Code Online (Sandbox Code Playgroud)
如果要在管理区域中添加新路由,只需在每次提交新路由时运行上述功能,它将重新生成路由缓存文件.
此方法可使您的路由application/config/routes.php保持不变,但允许您将新路由写入缓存文件,而不会显着影响站点的性能.
希望有所帮助!!
小智 5
这是一个老问题,但我最近面临着同样的困境,并发现这个答案很有用。
http://osvaldas.info/smart-database-driven-routing-in-codeigniter
创建一个表来放置所有路线
CREATE TABLE IF NOT EXISTS `app_routes` (
`id` bigint(20) NOT NULL auto_increment,
`slug` varchar(192) collate utf8_unicode_ci NOT NULL,
`controller` varchar(64) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `slug` (`slug`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
Run Code Online (Sandbox Code Playgroud)
内部 application/config/routes.php
//前两个是路由内的原始内容
$route[ 'default_controller' ] = 'main';
$route[ '404_override' ] = 'error404';
Run Code Online (Sandbox Code Playgroud)
//新版本
require_once( BASEPATH .'database/DB'. EXT );
$db =& DB();
$query = $db->get( 'app_routes' );
$result = $query->result();
foreach( $result as $row )
{
$route[ $row->slug ] = $row->controller;
$route[ $row->slug.'/:any' ] = $row->controller;
$route[ $row->controller ] = 'error404';
$route[ $row->controller.'/:any' ] = 'error404';
}
Run Code Online (Sandbox Code Playgroud)
例如,我使用 INSERT INTO app_routes( slug, controller) VALUES ('about', 'pages/about');
或者你可以写一个小的cms来控制你的路线,这就是我根据网站上的最后几位所做的
id | slug | controller | actions
1 | about | pages/about | edit / delete
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6359 次 |
| 最近记录: |