【发布时间】:2019-08-23 04:56:49
【问题描述】:
我已经设置了由 Yii2 驱动的网站,但我想在子目录中获取一些静态页面,然后在 url 中显示子目录的名称。例如,在 site/hotel/pacific.php 和 site/mini-rooms/standard.php 中,然后使用 xyz.com/hotel/pacific 和 xyz.com/mini-rooms/standard 访问它们。
我尝试在网上遵循一些示例,但我不确定为什么这些示例不起作用。一些例子也适用于 yii 而不是 yii2。 这是我所做的:
在SiteController.php 中,我在使用下面的代码之前创建了一个静态页面,我可以在xyz.com/hotel/pacific 访问它。但现在我将其移至子目录hotel。它以前位于 views/site 文件夹中:
public function actionPacific()
{
return $this->render('pacific');
}
然后我在view 文件夹内创建了一个文件夹名称pages。在pages 文件夹中,我创建了hotel 文件夹,并在酒店文件夹中放置了pacific.php 文件,所以我有views/site/pages/hotel/pacific.php
同样在SiteController.php,我添加了这个:
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
'page' => [
'class'=>'CViewAction',
],
'hotels' => [
'class'=>'CViewAction',
'basePath' => 'pages/hotels'
],
];
}
然后我通过添加以下代码来配置我的config/web.php:
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing'=>false,
'rules' => [
'<alias:[\w\-]+>' => 'site/<alias>',
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
],
],
我在访问 xyz.com/hotel/pacific 时遇到 404 错误。
对于这两个示例 - xyz.com/hotel/pacific 和 xyz.com/mini-rooms/standard,我该如何正确执行此操作。
【问题讨论】:
-
你在
controller/action而不是文件夹结构上映射url, -
我删除了这些代码,但无法让它工作,只留下了第一行。我已经更新了这个问题。可以看看吗?
-
我浏览了一些文档,看起来我遵循的指令对于 yii2 是不同的。例如,
CViewAction似乎不再使用。你能建议如何解决这个问题吗? -
CViewAction 似乎适用于 Yii1 .. 对于 Yii2,您应该为 miniRoom 创建一个控制器并添加您需要的操作
-
谢谢。但我真的是 Yii2 的新手。只是学习。获得一些帮助或教程将非常有帮助。