Yii2 — Правила urlManager с UUID в качестве идентификатора

Я пытаюсь создать правила в urlManager, чтобы использовать UUID в качестве идентификатора. Браузер отправляет следующий URL:

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

У меня есть следующие настройки:

main.php

'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)
}
})

Моя проблема:
Я получаю доступ к действию index и новому действию модуля без проблем. Но когда я вызываю действие удаления, я получаю ошибку 404.

Я не знаю, если я ошибаюсь в правилах в urlManager или я посылаю параметры неправильно через AJAX. У меня есть статические параметры, потому что я пытаюсь сделать сначала реализацию.

0

Решение

Ваш образец для id параметр неверен — \w не допускает дефис, поэтому он не будет соответствовать идентификаторам, содержащим -, Вам нужно изменить это правило:

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

в это:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]