我的 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需要保持不变。