php 表单自动生成
用thinkphp3.2时候,多数增删改查的页面基本相似。但是需要一个个去修改,修改列表字段,修改添加、编辑表单,重复工作要做好多次,有什么好的思路去做代码复用了?
参考大家的意见我做了如下的实现,请大家看一下谢谢:
1.先在行为中生成每个表的配置文件
$tables=M()->query('show tables');
$ts=[];
foreach ($tables as $v) {
$ts[]=$v['tables_in_addon'];
}
// 显示每个表的字段
$fields=[];
foreach ($ts as $v) {
$fields[$v]=M()->query("show FULL FIELDS from {$v}");
}
// 遍历生成配置文件
foreach ($fields as $k => $v) {
$filename=$k.".php";
$path=APP_PATH.'Common\Conf\Data';
is_dir($path)||mkdir($path,0777,true);
$str="<?php\r\n return ".var_export($v,true).";";
file_put_contents($path.'\\'.$filename, $str);
}
2.然后在基础控制器中,读取控制器中数据,并分配到模版.
public function __construct(){
parent::__construct();
$filename=C('DB_PREFIX')."_".lcfirst(CONTROLLER_NAME).".php";
// 读取指定的配置器文件
$bd=require COMMON_PATH.'/Conf/Data/'.$filename;
$this->assign('bd',$bd);
}
3.在模版页面中根据字段生成表格,这里大多数input类型为text,所以我们没有做表单的类型判断.
<form action="">
<?php foreach($bd as $v):?>
<?php echo $v['comment']?>:<input type="text" name="{$v['field']}"><br>
<?php endforeach;?>
</form>
有几个问题:
1.这样做有什么安全隐患,config目录下的表配置文件直接访问的话,直接会暴露数据库中的字段信息吧.
2.代码存在哪些问题,该怎么优化;还有什么好的解决思路.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
没用过think,所以我只能说我能说的。
就谈我第一眼看到的一些比较不好的地方:
1.第一个,
tables
foreach
可以换成array_columns
函数,具体可以去看php官网,有介绍2.要不断的把东西写入文件的话不要用
file_put_contents
,用文件流函数fopen,fwrite,fclose
等.如果坚持要用
file_put_contents
,可以在foreach
结束后,一次把内通放入文件中.3.在__construct里面使用
require
,我个人不建议这样写,可读性会很差,性能方面不了解。4.模版的话,不知道你那边能不能用
{{}} {!!}
这样的模版函数.如果能用的话,看起来也会好看一点吧.(这个不重要,是我的个人偏好)我写了一个composer,你可以参考看看。
就是为了减去一直重复的表单步骤。
PHPFORM
https://github.com/formers/fo...
这个应该是你想要的,最底下一行有非laravel工程使用的方法
form-builder PHP表单生成器,快速生成现代化的form表单