这听起来像你想使用的Factory design pattern
将此库:
class MyModelFactory {
static public function Factory($data) {
$type = key($data);
return new $type($data);
}
}
现在,在你的控制器,你可以做这样的事情:
$model = MyModelFactory::Factory(array($_REQUEST['model'] => $_REQUEST));
和现在你有$ _REQUEST ['model']中指定的任何模型的对象。一定要采取任何安全防范措施,以确保用户有权使用他们请求的型号
现在,既然您想使用常用的方法和东西,您的模型应该基于的..所以不是
class MyModelOne extends Model {
// stuff
}
你可能想是这样的一个抽象类/接口,以确保您所需的方法将总是可用:
abstract class MyAbstractModel extends Model {
protected $search_params;
public function __construct($data = array()) {
$search_params = $data['search_params'];
}
protected function GetSearchParameters() {
return $this->search_params;
}
abstract public function GetData();
abstract public function GetColumns();
abstract public function DefineViewOptions();
}
class MyModelOne extends MyAbstractModel {
public function GetData() {
$params = array();
$params[] = $this->db->escape_str($this->GetSearchParameters());
// return whatever data you want, given the search parameter(s)
}
public function GetColumns() {
// return some columns
}
public function DefineViewOptions() {
// return some configuration options
}
}
正如我所看到的,该模型通过返回视图选项直接影响视图的输出。这打破了MVC模式? – Samnan 2010-04-17 05:59:42