我正在Yii写一个项目。
我需要创建显示类别的规则。
网址必须类似于:http://localhost/frontend/web/c/category1/category2
我可以使用以下网址访问正确的网页:http://localhost/frontend/web/categorias/view?id=category1/category2
我已阅读文档,但找不到正确的指南。
我试过了:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<c:\w+><id:\d+>'=>'<categorias>/view',
]
],
和
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'c/<id:\d+>'=>'categorias/view',
]
],
但它不起作用,我收到错误
处理其他错误时出错: 异常'yii \ base \ ViewNotFoundException',消息'视图文件不存在:[project_route] /error.php
我该怎么做?
由于
答案 0 :(得分:1)
您的问题不清楚'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'c/<categories>'=>'categorias/view',
]
],
部分。我会根据对它的不同解释给你答案。
1)它是多个类别名称或ID(一个或多个)的列表
actionView
您应该在CategoriasController
中准备public function actionView($categories)
{
$categoryList = explode('/', $categories);
// ...the rest of action
}
,如下所示:
$categoryList
现在$categories
是传递'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'c/<name1:[\w\-]+>/<name2:[\w\-]+>'=>'categorias/view',
]
],
数组的名称或ID,具体取决于您使用的内容。
2)它是两个类别名称的列表(不多也不少)
actionView
您应该在CategoriasController
中准备public function actionView($name1, $name2)
{
// ...the rest of action
}
,如下所示:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'c/<id1:\d+>/<id2:\d+>'=>'categorias/view',
]
],
传递的类别是带有可选短划线的单词。
3)它是两个类别ID的列表(不多也不少)
actionView
您应该在CategoriasController
中准备public function actionView($id1, $id2)
{
// ...the rest of action
}
,如下所示:
sql
传递的类别是integeres。
答案 1 :(得分:0)
非常感谢你的帮助。
我的问题可以通过您的选项1(一个或多个类别的列表)得到更好的回答。
如果我写了一个类别(Error: (SystemJS) parentAnnotations is undefined
CustomComponent/<@http://localhost:3000/app/customCompo.js:8:13
DecorateConstructor@http://localhost:3000/node_modules/reflect-metadata/Reflect.js:531:29
decorate@http://localhost:3000/node_modules/reflect-metadata/Reflect.js:115:20
__decorate<@http://localhost:3000/app/app.component.js:4:84
AppComponent<@http://localhost:3000/app/app.component.js:16:20
@http://localhost:3000/app/app.component.js:12:21
@http://localhost:3000/app/app.component.js:1:31
@http://localhost:3000/app/app.component.js:1:2
@http://localhost:3000/app/app.module.js:13:23
@http://localhost:3000/app/app.module.js:1:31
@http://localhost:3000/app/app.module.js:1:2
@http://localhost:3000/app/main.js:3:20
@http://localhost:3000/app/main.js:1:31
@http://localhost:3000/app/main.js:1:2
ZoneDelegate.prototype.invoke@http://localhost:3000/node_modules/zone.js/dist/zone.js:229:17
Zone.prototype.run@http://localhost:3000/node_modules/zone.js/dist/zone.js:113:24
scheduleResolveOrReject/<@http://localhost:3000/node_modules/zone.js/dist/zone.js:509:52
ZoneDelegate.prototype.invokeTask@http://localhost:3000/node_modules/zone.js/dist/zone.js:262:21
Zone.prototype.runTask@http://localhost:3000/node_modules/zone.js/dist/zone.js:151:28
drainMicroTaskQueue@http://localhost:3000/node_modules/zone.js/dist/zone.js:405:25
ZoneTask/this.invoke@http://localhost:3000/node_modules/zone.js/dist/zone.js:336:25
Evaluating http://localhost:3000/app/app.component.js
Evaluating http://localhost:3000/app/app.module.js
Evaluating http://localhost:3000/app/main.js
Error loading http://localhost:3000/app/main.js
Stack trace:
(SystemJS) parentAnnotations is undefined
CustomComponent/<@http://localhost:3000/app/customCompo.js:8:13
DecorateConstructor@http://localhost:3000/node_modules/reflect-metadata/Reflect.js:531:29
decorate@http://localhost:3000/node_modules/reflect-metadata/Reflect.js:115:20
__decorate<@http://localhost:3000/app/app.component.js:4:84
AppComponent<@http://localhost:3000/app/app.component.js:16:20
@http://localhost:3000/app/app.component.js:12:21
@http://localhost:3000/app/app.component.js:1:31
@http://localhost:3000/app/app.component.js:1:2
@http://localhost:3000/app/app.module.js:13:23
@http://localhost:3000/app/app.module.js:1:31
@http://localhost:3000/app/app.module.js:1:2
@http://localhost:3000/app/main.js:3:20
@http://localhost:3000/app/main.js:1:31
@http://localhost:3000/app/main.js:1:2
ZoneDelegate.prototype.invoke@http://localhost:3000/node_modules/zone.js/dist/zone.js:229:17
Zone.prototype.run@http://localhost:3000/node_modules/zone.js/dist/zone.js:113:24
scheduleResolveOrReject/<@http://localhost:3000/node_modules/zone.js/dist/zone.js:509:52
ZoneDelegate.prototype.invokeTask@http://localhost:3000/node_modules/zone.js/dist/zone.js:262:21
Zone.prototype.runTask@http://localhost:3000/node_modules/zone.js/dist/zone.js:151:28
drainMicroTaskQueue@http://localhost:3000/node_modules/zone.js/dist/zone.js:405:25
ZoneTask/this.invoke@http://localhost:3000/node_modules/zone.js/dist/zone.js:336:25
Evaluating http://localhost:3000/app/app.component.js
Evaluating http://localhost:3000/app/app.module.js
Evaluating http://localhost:3000/app/main.js
Error loading http://localhost:3000/app/main.js
),我尝试过这个选项并且工作正常,但不适用于两个或更多类别:
处理其他错误时出错: 异常'yii \ base \ ViewNotFoundException',消息'视图文件不存在:[project_route] \ vendor \ yiisoft \ yii2 \ base \ View.php中的[project_route] \ frontend \ views \ site \ error.php':227
http://localhost/frontend/web/c/category1
使用选项2,它可以正常使用两个类别,但不能使用一个。
我看到更好的选择是1,但我不明白为什么不起作用。
答案 2 :(得分:-1)
我使用两个规则来解决它,两个方法调用另一个
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'c/<category:[\w\-]+>'=>'categorias/view-first',
'c/<category1:[\w\-]+>/<category2:[\w\-]+>'=>'categorias/view-second',
]
],