【发布时间】:2012-09-21 01:41:44
【问题描述】:
我的 Codeigniter 项目有一长串相同的类别,每个类别都有许多相同的方法。
为了使其动态和简洁,我使用 _remap 函数在控制器中加载相同的方法。现在我正在尝试复制控制器
例如我的控制器 Antelope.php Bat.php Cuckoo.php Dog.php Elephant.php... Zebra.php 下面都有这个格式(我用_remap把所有类似的方法都浓缩成一个)。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Antelope extends CI_Controller {
function __construct() {
parent::__construct();
}
private function _remap($method, $params=array()){
$this->animal = ucwords($this->router->fetch_class());
$allowed_methods = array("Tame", "Buy", "Sell", "Gift");
if (in_array($method, $allowed_methods)):
// Model zoo has been autoloaded
data["foobar"] = $this->zoo->get_data($this->animal, $method);
// Stuff goes here
else:
$this->index();
endif;
}
public function index(){
// Stuff goes here
}
}
/** End of file Antelope.php **/
重新映射对 Antelope 及其所有重新映射的方法都有效,但是我有没有办法将相同的方法应用于所有其他文件 所以我可以只使用一个 Animal.php 控制器文件来代替强>?
我想我可能会使用routes.php,但是控制器列表太长了;如果我明确列出每个“动物”路由,我将在路由文件中有数百行。
有什么办法吗?
编辑:“动物类型”列在数据库中,并且会随着时间的推移不断增加。我不想继续重新访问该项目以创建新控制器或为数据库中的新元素添加新类!这就是我想使用动态路由方法的原因。此外,该项目是重新设计的网站,因此 http://www.website.com/antelope/buy/3 等 URL 需要保持不变。
【问题讨论】:
-
为每种动物类型配备一个控制器似乎有点矫枉过正。你确定你不能用一个控制器来做吗(在我看来你可以)。
-
实际上,我不能。这是对我想要实现的目标的过度简化的描述。谢谢!
-
糟糕。我的意思是,是的,我想使用单个控制器。但不,我不认为这个问题是微不足道的。
标签: php codeigniter routing controller remap