Php 在Codeigniter中重新映射以下划线开头的函数
Codeigniter要求在控制器中使用Php 在Codeigniter中重新映射以下划线开头的函数,php,codeigniter,Php,Codeigniter,Codeigniter要求在控制器中使用\u函数(),这样就没有人可以从url访问它们。现在,我有一个名为Profile的控制器,还有一个\u remap()函数,这样我就可以以http://example.com/profile/asdf。。因此,每当我调用url时,\u remap()函数将asdf作为输入并对其进行处理。 现在,对于一个特殊情况,我必须输入一个以下划线开头的名称。像http://example.com/profile/_asdf,它现在生成了一个404,因为Codeigni
\u函数()
,这样就没有人可以从url访问它们。现在,我有一个名为Profile
的控制器,还有一个\u remap()
函数,这样我就可以以http://example.com/profile/asdf
。。因此,每当我调用url时,\u remap()
函数将asdf
作为输入并对其进行处理。现在,对于一个特殊情况,我必须输入一个以下划线开头的名称。像
http://example.com/profile/_asdf
,它现在生成了一个404,因为Codeigniter不允许在URL中的方法名称前面出现uu
如何克服这个问题?解决方案
实际上,Codeigniter有一个url验证函数,当它遇到url前面的下划线时,会生成404。我只是稍微修改了一下这个函数。在文件
/system/core/Router.php
中,有一个名为\u set\u request()
的函数。它的第一行是$segments=$this->\u validate\u请求($segments)代码>
我刚刚修改了$segments变量,用破折号(-)替换了所有下划线。
$segments=$this->\u validate\u请求(str\u replace(“\u”、“-”、$segments))代码>
在我的\u remap()
函数中,将它们替换回来。这是没有私人功能被调用,我完成了我的工作<代码>:)
真的需要使用下划线吗?CI认为,作为一项私人职能(afaik也是一项惯例),是的,这是必要的。不管怎样,解决了。发布解决方案。:)您可能应该将其添加为答案或关闭问题。