首页 > 解决方案 > Yii2 - 以 UUID 为 id 的 urlManager 规则

问题描述

我正在尝试在 urlManager 中创建规则以使用 UUID 作为 id。浏览器发送下一个 URL:

https://localhost/profiles/delete/e1028ae1-ce79-11e8-a22d-00163e9c1798

我有以下设置:

主文件

'urlManager' => [
     'class' => 'yii\web\UrlManager',
     'enablePrettyUrl' => true,
     'showScriptName' => false,
     'rules' => [
         '' => 'site/index',
         '<action:(login|logout|about|contact)>' => 'site/<action>',
         //profiles
         '<module:(profiles)>/<id:\d+>' => '<module>/default/view',
         '<module:(profiles)>/<action:(index|delete|new)>/<id:\w+>' => '<module>/default/<action>',
         '<module:(profiles)>/<action:(index|delete|new)>' => '<module>/default/<action>',
     ]
]

我的DefaultController.php的一部分(/common/modules/profiles/coontrollers/DefaultController.php)

<?php

namespace common\modules\profiles\controllers;
...

class DefaultController extends Controller
{
    ...
    public function actionDelete($id)
    {
        die($id);
    }
    ...
}

我正在使用 AJAX 将参数发送到操作。

let action = 'profiles/delete'
let id = 'e1028ae1-ce79-11e8-a22d-00163e9c1798'
$.ajax({
    async: false,
    url: 'https://localhost/' + action + '/' + id,
    type: 'POST',
    dataType: 'json',
    success: (response) => {
        console.log(response)
    }
})

我的问题: 我可以毫无问题地访问模块的索引操作和新操作。但是当我调用删除操作时,我收到 404 错误。

我不知道我是否在 urlManager 中的规则有误,或者我通过 AJAX 发送了错误的参数。我有静态参数,因为我尝试首先实现。

标签: phpmoduleyii2yii2-urlmanager

解决方案


您的idparam 模式不正确 -\w不允许使用连字符,因此它不会匹配包含-. 您需要更改此规则:

'<module:(profiles)>/<action:(index|delete|new)>/<id:\w+>' => '<module>/default/<action>',

进入这个:

'<module:(profiles)>/<action:(index|delete|new)>/<id:[\w-]+>' => '<module>/default/<action>',

推荐阅读