php - 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 发送了错误的参数。我有静态参数,因为我尝试首先实现。
解决方案
您的id
param 模式不正确 -\w
不允许使用连字符,因此它不会匹配包含-
. 您需要更改此规则:
'<module:(profiles)>/<action:(index|delete|new)>/<id:\w+>' => '<module>/default/<action>',
进入这个:
'<module:(profiles)>/<action:(index|delete|new)>/<id:[\w-]+>' => '<module>/default/<action>',
推荐阅读
- rest - RESTful 设计,用于访问来自不同受众的不同格式的相同资源
- hive - 通过 prestosql 创建 Hive 表时如何指定 SERDEPROPERTIES 和 TBLPROPERTIES
- azure - Azure 文件复制任务 - [错误] 对象引用未设置为对象的实例
- adb - 如何直接向群组发送消息?
- java - Dockerized SpringBoot REST api 不支持请求方法“GET”
- docker - 通过 crontab 运行 docker 容器不起作用
- c# - 无法将单元格插入 Open XML 文档
- reactjs - 为什么更改setstate的行时状态没有改变
- javascript - 为什么在带有引导程序的 Rails 6 中使用 webpacker 时我的 js.erb 视图不起作用?
- r - 如何在字符串中的模式之前提取数字