Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii2 允许解析类似URL路由的文件_Yii2_Url Routing_Yii Url Manager - Fatal编程技术网

Yii2 允许解析类似URL路由的文件

Yii2 允许解析类似URL路由的文件,yii2,url-routing,yii-url-manager,Yii2,Url Routing,Yii Url Manager,每当我尝试处理一个看起来像controller/foo.xtn的路由时,Yii就会抱怨无法确定当前请求的路径信息。。我想通过将xtn转换为动作参数来处理这些路由,即调用actionFoo($xtn),但也允许controller/foo?type=xtn。我的计划是编写一个UrlRule来定义这种行为,但是如何解决路径信息解析失败的问题呢 我使用的是enablePrettyUrl,我想enableStrictParsing,但现在我可以不用它了 编辑:什么有效,什么无效- controller/

每当我尝试处理一个看起来像
controller/foo.xtn
的路由时,Yii就会抱怨
无法确定当前请求的路径信息。
。我想通过将
xtn
转换为动作参数来处理这些路由,即调用
actionFoo($xtn)
,但也允许
controller/foo?type=xtn
。我的计划是编写一个UrlRule来定义这种行为,但是如何解决路径信息解析失败的问题呢

我使用的是
enablePrettyUrl
,我想
enableStrictParsing
,但现在我可以不用它了

编辑:什么有效,什么无效-

controller/foo/abc?type=xtn ---> actionFoo('abc', 'xtn') # works
controller/foo/abc/xtn ---> actionFoo('abc', 'xtn') # works
controller/foo/abc.xtn ---> actionFoo('abc', 'xtn') # doesn't work
该错误是在尝试解析
controller/foo/abc.xtn
时引发的,因此Web服务器正在通过Yii路由该错误

路由配置(目前使用PHP内部Web服务器):

所以我不认为这是一个Web服务器问题。下面是$\u服务器阵列的唯一显著区别:

# fails in getPathInfo()
'REQUEST_URI' => '/feeds/strings/en.json?app=4',
'SCRIPT_NAME' => '/feeds/strings/en.json',
'SCRIPT_FILENAME' => '/Users/darvids0n/NetBeansProjects/php-web-services/web/www/routing.php',
'PHP_SELF' => '/feeds/strings/en.json',

# works
'REQUEST_URI' => '/feeds/strings/en?app=4',
'SCRIPT_NAME' => '/index.php',
'SCRIPT_FILENAME' => '/Users/darvids0n/NetBeansProjects/php-web-services/web/index.php',
'PATH_INFO' => '/feeds/strings/en',
'PHP_SELF' => '/index.php/feeds/strings/en',

但是,如果你阅读Yii的文章,你会发现缺乏路径信息实际上并没有导致“确定路径信息”失败。

未知路径应该以404结尾。尝试重定向可能很棘手,您必须小心不要陷入循环

您可以在列表中添加最后一条规则,即“最后一条”路径,如

'<controller>/<action>' => '<controller>/<action>',
如果要将扩展传递给操作,我将坚持使用一个参数名称:

'controller/foo/<type:\w+>' => 'controller/foo'

未知路径应以404结尾。尝试重定向可能很棘手,您必须小心不要陷入循环

您可以在列表中添加最后一条规则,即“最后一条”路径,如

'<controller>/<action>' => '<controller>/<action>',
如果要将扩展传递给操作,我将坚持使用一个参数名称:

'controller/foo/<type:\w+>' => 'controller/foo'
//控制器(站点)
公共函数actionFoo($type)
//统治
'site/foo'=>'site/foo',//site/foo.xtn
'site/foo/'=>'site/foo'//site/foo/xtn
//控制器(站点)
公共函数actionFoo($type)
//统治
'site/foo'=>'site/foo',//site/foo.xtn
'site/foo/'=>'site/foo'//site/foo/xtn

在回答之前,我检查了-它有效,可能您有冲突,请将此规则放在第一位。Yii版本:2.0.9。还要检查web服务器是否将
xtn
处理为
php
相同的Yii版本。我正在使用PHP internal webserver来测试这一点,这可能是一个问题,除了我确实在浏览器中看到一个Yii错误,所以它仍然通过
index.PHP
解决所有问题。在回答之前,我检查了-它可以工作,可能有冲突,请将此规则放在第一位。Yii版本:2.0.9。还要检查web服务器是否将
xtn
处理为
php
相同的Yii版本。我正在使用PHP internal webserver来测试这一点,这可能是一个问题,但我确实在浏览器中看到了一个Yii错误,所以它仍然通过
index.PHP
解决所有问题。我不确定这有什么帮助。不管我的URL规则如何,路由请求的初步步骤之一是调用。这会在我们开始迭代规则之前引发异常。哦,在这种情况下,您的服务器配置存在一些问题。是阿帕奇吗?如果是的话,你能粘贴你的主机设置吗?粘贴了路由配置和其他一些东西。完整的$\u服务器转储在这里很方便。发布。事实上,很可能PHP路由中有一些东西是可以修复的,但是没有相关的文档来演示PHP服务器的功能。我不确定这有什么帮助。不管我的URL规则如何,路由请求的初步步骤之一是调用。这会在我们开始迭代规则之前引发异常。哦,在这种情况下,您的服务器配置存在一些问题。是阿帕奇吗?如果是的话,你能粘贴你的主机设置吗?粘贴了路由配置和其他一些东西。完整的$\u服务器转储在这里很方便。发布。实际上很有可能在PHP路由中有一些东西是可以修复的,但是没有相关文档来演示PHP服务器的功能。
'controller/foo/<type:\w+>' => 'controller/foo'
public function actionFoo($type)
// controller (site)
public function actionFoo($type) 
// rule
'site/foo<type:(\.xtn)>' => 'site/foo', //site/foo.xtn
'site/foo/<type:(\.xtn)>' => 'site/foo' //site/foo/xtn