在进行thinkphp开发的时候,有一种开发思想就是:
一个控制器对应一个数据表的管理,控制器的命名采用驼峰式命名,
数据表采用每个单词之间下划线连接 。
举个例子:有一个客户类型表,命名为:customer_type,
然后在建立控制器时,命名:CustomerType
然后就可以在继承的父类中,检测当前控制器对应的模型(数据表),当没有传进参数时,
默认对应的是当前的控制器的名称。这样在模型新增和编辑的时候,可以带来简便。
这种方法有一个坏处就是,没有对应的函数将控制器转换未我们需要的数据表名。
所以本人自己设计了一个,代码如下:
/** * 将一个字符串装换为数据表的名称 * 要求: * 1.字符串符合驼峰命名规则(或形式如下:aaBb => aa_ab, AaBb=> aa_bb) * 2.数据库的书库表命名方式如下:aa_bb * @param $str 需要转换的字符串 默认为当前的控制器名 * @param $delimiter 在大写字符转化为小写的之前前一个位置用该字符填充,默认下划线 * @return $str 转换之后的字符串 */ function str_to_tableName($str='', $delimiter = '_'){ $str = $str ? $str : hinkRequest::instance()->controller(); do{ $pos = preg_match('/([A-Z])/', $str, $matches); if($pos === 0) break; $strs = explode($matches[0], $str, 2); $str = ($strs[0] ? $strs[0].$delimiter : '').strtolower($matches[0]).$strs[1]; }while(1); return $str; }
代码和逻辑并不复杂,看代码就可以懂。
不过尴尬的是:本人突然想到,既然只是匹配,可以将控制器转化未表名,那反过来,也可以将表名转话为控制器的名啊~~~
真的是悲催~~~不知到哪一种更加简便~。以后测试之后,再来分享,也希望有大神可以指导一下。非常感谢!