Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/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
Php Yii用户友好的url并保持旧的get格式工作_Php_Yii_Yii2_Yii Url Manager - Fatal编程技术网

Php Yii用户友好的url并保持旧的get格式工作

Php Yii用户友好的url并保持旧的get格式工作,php,yii,yii2,yii-url-manager,Php,Yii,Yii2,Yii Url Manager,我将以下url规则设置为主配置: 但现在它显示了一个错误。有没有办法让它继续工作?在我看来,最好的办法是用IDE正则表达式替换选项替换所有旧URL。但无论如何,你可以这样做: 在urlManager配置中使用以下路由规则: “规则”=>[ [ 'class'=>'my\namespace\UrlRule', “模式”=>“/”, “路由”=>“/”, ], … 使用my\namespace\UrlRule扩展yii\web\UrlRule,并重写其“parseRequest”方法,以便在以下

我将以下url规则设置为主配置:


但现在它显示了一个错误。有没有办法让它继续工作?

在我看来,最好的办法是用IDE正则表达式替换选项替换所有旧URL。但无论如何,你可以这样做:

  • 在urlManager配置中使用以下路由规则:
    
    
    “规则”=>[
    [
    'class'=>'my\namespace\UrlRule',
    “模式”=>“/”,
    “路由”=>“/”,
    ],
    …

  • 使用my\namespace\UrlRule扩展yii\web\UrlRule,并重写其“parseRequest”方法,以便在以下情况下使用$\u GET['r']参数值:

  • 名称空间my\名称空间; 类UrlRule扩展\yii\web\UrlRule { 公共函数parseRequest($manager,$request) { 如果($pathInfo=\Yii::$app->request->get('r')){ \Yii::$app->request->setPathInfo($pathInfo); } 返回父::parseRequest($manager,$request); } }
    您也可以扩展yii\web\Request,这样它的“getPathInfo”方法可以在设置时使用$\u GET['r']参数。

    我认为最好的方法是用IDE正则表达式替换选项替换所有旧URL。但无论如何,您可以通过这种方式执行您想要的操作:

  • 在urlManager配置中使用以下路由规则:
    
    
    “规则”=>[
    [
    'class'=>'my\namespace\UrlRule',
    “模式”=>“/”,
    “路由”=>“/”,
    ],
    …

  • 使用my\namespace\UrlRule扩展yii\web\UrlRule,并重写其“parseRequest”方法,以便在以下情况下使用$\u GET['r']参数值:

  • 名称空间my\名称空间; 类UrlRule扩展\yii\web\UrlRule { 公共函数parseRequest($manager,$request) { 如果($pathInfo=\Yii::$app->request->get('r')){ \Yii::$app->request->setPathInfo($pathInfo); } 返回父::parseRequest($manager,$request); } }
    您也可以扩展yii\web\Request,使其“getPathInfo”方法可以使用$\u GET['r']如果设置了参数。

    您不能这样做,我的朋友。它是'get'或'path'URL格式。您可以在.htaccess或apache中重写URL以将旧URL映射到新URL。您不能这样做,我的朋友。它是'get'或'path'URL格式。您可以在.htaccess或apache中重写URL以将旧URL映射到新URL。您能解释一下$pathInfo或co是什么吗完成该示例?它似乎不存在,而且我在其他任何地方都找不到允许获取格式URL的自定义urlrule示例。该示例已完全完成,除了urlrule命名空间之外,其他示例都可以正常工作。也许这不是最佳做法,但我在if()语句中定义了$pathInfo。它类似于:$pathInfo=\Yii:$app->request->get('r');if($pathInfo)结束。你能解释一下什么是$pathInfo或者完成这个例子吗?它似乎不存在,而且我在其他任何地方都找不到允许获取格式URL的自定义urlrule的例子。除了urlrule命名空间之外,这个例子已经完全完成并且可以工作了。也许这不是最佳实践,但我在if()中定义了$pathInfo语句。它类似于:$pathInfo=\Yii::$app->request->get('r');if($pathInfo)end,依此类推。
        'urlManager'=>array(
            'urlFormat'=>'path',
            'showScriptName'=>false,
            'rules'=>array(
                '<controller:\w+>'=>'<controller>/list',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
                '<controller:\w+>/<id:\d+>/<title>'=>'<controller>/view',
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '\?r=<controller:\w+>/<action:\w+>' => '<controller>/<action>'
            ),
        ),
    
    index.php?r=controller/action&param1=value1
    
    namespace my\namespace; class UrlRule extends \yii\web\UrlRule { public function parseRequest($manager, $request) { if ($pathInfo = \Yii::$app->request->get('r')) { \Yii::$app->request->setPathInfo($pathInfo); } return parent::parseRequest($manager, $request); } }