我有一个models.php
页面,其中包含特定模型的表单规范。
models.php
$books = [
['Book Name', 'text' ],
['Author', 'text']
];
$vegetables = [
['Name', 'text'],
['Photo', 'file']
]
现在,该页面由一个admin.php
页面访问,该页面根据给定的name
和input type
生成适当的HTML form
。
我想填写表单并将数据发送到 handle.php
中,然后使用特定的函数处理数据,以便将数据填充到适当的表中。
handle.php
function books(){
// this will fill the details into table of books.
INSERT INTO BOOKS
name = $_POST['book_name']
author $_POST['author']
}
function vegetables(){
// this will fill the details into table of vegetables.
INSERT INTO VEGETABLES
name = $_POST['book_name']
photo = $_FILE['photo']
}
(如果有其他更好的方法,请注意,我会这样做并删除我的问题。)
发布于 2018-06-04 04:14:51
这是我的建议。正如评论中所说,这只是我做这些事情的方式,并不一定是每种情况下的最佳解决方案。
我有一个基本模型,它定义了所有模型需要共同拥有的所有方法。这是一个非常简单的版本:
class Model {
public $modelName = 'default';
public $id = null;
private $fields = [];
private $tableName = 'default';
private $tableDefinition = [];
private $idField = 'id';
public function insert($dataset) {
// do some database magic by using $this->fields, or $this->tableDefinition
$sql = "INSERT into {$this->tableName} ...";
...
return $id;
}
public function update($id, $dataset) {
// do some more database magic by using $this->fields, or $this->tableDefinition
}
// many more methods. To get data, delete, sort, ..
//...
}
现在每个模型都扩展了这个基本模型类,并设置了它的特定参数,甚至可能覆盖了一些方法或添加了一些特殊的方法:
class Books extends Model {
public $modelName = 'book';
private $fields = ['bookName','Author'];
private $tableName = 'BOOKS';
private $tableDefinition = [
['bookName','varchar'],
['Author','varchar']
];
// private $idField = 'id'; // you can ommit that, if it's the default.
}
如果蔬菜的行为不同,你可以简单地覆盖一个方法:
class Vegetables extends Model {
public $modelName = 'vegetable';
// set all other properties...
// override insert() for example
public function insert($dataset) {
// do something that doesn't comply with the standard procedure
}
}
然后在handle.php中,你可以这样做:
<?php
$modelName = $request; // get it from your form, your url, ..
// & verify this model(file) exists.
$model = new $modelName();
$model->insert($dataSet);
发布于 2018-06-04 12:50:34
创建一个基本接口BaseModel.php,它将具有插入、更新和选择的基本签名
创建一个实现BaseModel类的派生类booksModel.php和vegetablesModel.php。
通过这种方式,您可以使代码具有可扩展性。如果有一些通用的功能,你可以将基类作为抽象类。
abstract class BaseModel {
abstract function add($dataObject);
abstract function get($dataObject);
}
class BooksModel extends BaseModel {
public function add($dataObject) {
/* Implementation */
}
public function get($dataObject) {
/* Implementation */
}
}
class VegetableModel extends BaseModel {
public function add($dataObject) {
/* Implementation */
}
public function get($dataObject) {
/* Implementation */
}
}
https://stackoverflow.com/questions/50667635
复制相似问题