thinkphp icon indicating copy to clipboard operation
thinkphp copied to clipboard

ThinkPHP3.2 ——基于PHP5的简单快速的面向对象的PHP框架

Results 100 thinkphp issues
Sort by recently updated
recently updated
newest added

看了Route.class.php的代码,静态路由支持“array('[控制器/操作]','额外参数1=值1&额外参数2=值2...')“这种形式的路由,但是手册上还是说“静态路由的路由地址 只支持字符串,格式:[控制器/操作?]参数1=值1&参数2=值2“,建议修改一下开发手册。

默认在Runtime里面的Logs目录下面的日志记录文件没有记录接收到的post数据,请问怎样配置才可以记录post数据?

请问最新版本是放在master下面的么?那么3.2分支下的更新都是patch么?有没有同步到master?

在使用模块部署的时候,遇见了这样的一个问题: 近期公司有一个商城项目,技术选型用到了`ThinkPHP`框架,使用的是3.2版本,有一个这样的需求: 项目总共分为两个模块,分别是前台`Home`和后台`Admin`,很常规的配置。这时在访问的时候希望前台可以隐藏模块名,后台访问的模块名改为`manager`,根据文档说可以这样配置: ``` php 'MODULE_ALLOW_LIST' => array('Home','Manager'), 'DEFAULT_MODULE' => 'Home', 'URL_MODULE_MAP' => array('manager'=>'admin'), ``` > 注意:以上配置必须在应用配置里面设置的,不能在模块配置。原因可以通过ThinkPHP的系统流程来看:它会在27步进行url调度,然后在33步加载模块配置,而url调度时就会用到那些配置,如果在模块中设置则会读取框架默认的配置文件,就导致设置无效。 这样设置后了,访问后台模块`/manager/dashboard/show`是没有任何问题的(已经在配置文件中忽略url的大小写),根据文档访问前台比如`HomeController`的`index`方法可以这样:`/home/index`,结果却是提示Index控制器不存在;假如我前台还有一个控制器是`UserController`,访问其中的`index`方法则会提示User模块不存在。这是为什么呢? > 实际上,要通过配置来隐藏模块名,还必须在配置文件中配置一项`MULTI_MODULE`为false才可以。看了源码才会明白,文档不会和你说的,但是这样配置了就会导致模块名映射失效的。 `ThinkPHP`的url调度是在`Think\Dispatcher::dispatch`方法中的,我们可以通过IDE的断点跟进来查看,该方法的代码非常多,我们选择三段主要的来分析: [点击查看代码](http://cdn.xtwind.com/uploads/2016/06/QQ截图20160602104430.png) 以上这段代码就是解析模块名的,在138行判断`__INFO__`常量和`MULTI_MODULE`是否为真,这个`__INFO__`就是我们访问的url,而`MULTI_MODULE`表示是否开启多模块配置,默认为开启。在默认情况下会往`$_GET`这个数组里面写入模块名,然后会在这里定义当前模块名: [点击查看代码](http://cdn.xtwind.com/uploads/2016/06/QQ截图20160602111114.png) 根据以上代码可以知道,如果我们有定义`BIND_MODULE`的话当前模块就是该常量值,而如果没有定义的话就是会从`getModule()`这个方法来获取,我们再跟进看看这个代码: [点击查看代码](http://cdn.xtwind.com/uploads/2016/06/QQ截图20160602113022.png) 框架会先从`$_GET`中来获取来获取模块名,而默认情况下`MULTI_MODULE`是开启的,所以`$_GET`中就会有当前模块名(实际该模块名是错误的),在354行就会获取到当前模块名为`Service`(这个实际是控制器名),然后去配置中读取允许的模块名做判断后发现Service不存在,抛出模块不存在异常。 以上是在`MULTI_MODULE`开启的情况下(该配置框架默认开启),假如这个配置关闭呢? 根据文档该配置关闭后,就必须配置`DEFAULT_MODULE`这个选项,我们配置为了`Home`。到这里相信大家已经清楚了,关闭这个后前台是可以隐藏入口来访问的,但是后台就不能通过映射来访问了。因为在138行的代码写着很清楚了,关闭后框架就不会从url中来解析当前模块名,而是获取配置的`DEFAULT_MODULE`的值,来作为当前模块名。顺便一起分析下把: [点击查看代码](http://cdn.xtwind.com/uploads/2016/06/QQ截图20160602114132.png)...

数据库Driver.class.php中的delete方法对多表删除的支持如下: ``` if (strpos($table, ',')) { // 多表删除支持USING和JOIN操作 if (!empty($options['using'])) { $sql .= ' USING ' . $this->parseTable($options['using']) . ' '; } $sql .= $this->parseJoin(!empty($options['join']) ? $options['join'] : ''); }...

tp5的model类的save函数,在执行完一次后,会强制$this->isUpdate = true; 这样导致,我在插入第二次数据的时候,系统自动使用了update,而不是insert 以下只是demo $u = model('user'); for($i=0;$isave($data); } 你会发现只插入了一条数据,因为从第二条开始,都是执行的update,而不是insert了