php 表单自动生成

发布于 2022-09-05 04:10:56 字数 1561 浏览 18 评论 0

用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

遗失的美好 2022-09-12 04:10:56

没用过think,所以我只能说我能说的。
就谈我第一眼看到的一些比较不好的地方:
1.第一个,tables foreach可以换成array_columns函数,具体可以去看php官网,有介绍
2.要不断的把东西写入文件的话不要用file_put_contents,用文件流函数fopen,fwrite,fclose等.
如果坚持要用file_put_contents,可以在foreach结束后,一次把内通放入文件中.
3.在__construct里面使用require,我个人不建议这样写,可读性会很差,性能方面不了解。
4.模版的话,不知道你那边能不能用{{}} {!!}这样的模版函数.如果能用的话,看起来也会好看一点吧.(这个不重要,是我的个人偏好)

紫瑟鸿黎 2022-09-12 04:10:56

我写了一个composer,你可以参考看看。
就是为了减去一直重复的表单步骤。
PHPFORM

两个我 2022-09-12 04:10:56

https://github.com/formers/fo...

这个应该是你想要的,最底下一行有非laravel工程使用的方法

小…楫夜泊 2022-09-12 04:10:56

form-builder PHP表单生成器,快速生成现代化的form表单

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文