最近发现一个诡异的现象:
在drupal 6的管理后台,修改menu里面的navigation(导航),
也就是那个可以drag的table,
修改一下,无论是拖动改变顺序,还是check/uncheck checkbox,
提交之后,都无法保存。
先google了一下,有人也遇到相同问题,无解。
然后怀疑是和某模块冲突,因为drupal刚刚安装好的时候,
这个功能肯定是正常的。
于是把所有的第三方模块禁用了,但是没有禁用我自己写的模块,
情况并没有好转。
再怀疑是表单出了问题,用firebug跟了一下,
点击提交按钮之后,确实有POST动作发生,那么表单也没有什么问题了。
然后去modules/menu目录,下载了它的二个源文件,开始分析。
使用print+die的方式来debug,
最终发现这个表单的submit处理函数根本就没有被调用到,
可是表单确实被POST过去了呀。
然后开始尝试自己写一个测试用的submit处理函数和validate函数,
也没有被调用到。
然后再尝试修改form的名称。。。还是无效。
三个小时过去了。。无解。
然后开始在drupal的官网乱翻,居然翻到了一条相关的信息,
地址记不住了,
大意是说:
有人写了一个form,里面有超过200个元素,发现提交之后无法获取到表单全部元素的值。
然后有人回答说可能是装了Suhosin扩展之后,会有这个限制。
这个人就去修改了php.ini里面Suhosin相关的选项,就OK了。
然后我把phpinfo调出来一看,果然安装了Suhosin,
而且:
suhosin.post.max_vars 200(默认值)
suhosin.request.max_vars 200 (默认值)
啊,原因就在此了。
由于我的模块在navigation里面添加了大约15个menu,再搭配上系统原有的几十个menu,
每个menu对应3-4个表单元素,最后竟然超过了200个,
导致submit之后,formid居然没传过去。
所以drupal也就不知道用哪个submit处理函数了。
如此。