我已经设置了支持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');
}
然后我在pages
文件夹中创建了一个文件夹名称view
。在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
正确执行此操作。
答案 0 :(得分:0)
据我了解,您在1
中使用2
而不是CWebView
中使用Yii1
来混合Yii Yii2
和yii\web\ViewAction
。因此,您可能需要的是views/site/hotel/pacific.php
,它将代表一个动作。别人可能会建议更好的答案。
因此,如果您有目录。
views/site/hotel/five-star.php
pacific.php
您想通过使用xyz.com/hotel/pacific
输入URL five-star.php
和xyz.com/hotel/five-star
来访问public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction'
],
'pacific' => [
'class' => 'yii\web\ViewAction',
'defaultView' => 'pacific',
'viewPrefix' => 'hotel'
],
'five-star' => [
'class' => 'yii\web\ViewAction',
'defaultView' => 'five-star',
'viewPrefix' => 'hotel'
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null
]
];
}
视图。
然后,您应按以下方式配置它们
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing'=>false,
'rules' => [
'/' => 'site/index',
'<alias:[\w\-]+>' => 'site/<alias>',
'hotel/<alias:[\w\-]+>' => 'site/<alias>',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>'
]
],
然后按如下所示更新urlManager
xyz.com/hotel/pacific
现在,如果您输入浏览器xyz.com/hotel/five-star
或void OnTriggerEnter2D(Collision2D other)
{
if(other.gameObject.CompareTag("gem")){
GemScript gemScript = other.gameObject.GetComponent<GemScript>();
if(!gemScript.isUsed){
DO YOU STUFF HERE
gemScript.isUsed = true;
}
}
}
,它将显示相应的视图。
希望它可以解决您的问题。
答案 1 :(得分:0)
我决定在HotelController.php
文件夹内创建controller
,然后在hotel
文件夹下创建views
文件夹。然后,我在酒店文件夹中添加了pacific.php
,并在HotelController.php
中添加了操作代码,如下所示。
public function actionPacific()
{
return $this->render('pacific');
}
尽管我不确定是否有更好的选择,但它可以按我的意愿工作。我删除了网址管理器中的规则,因为现在不需要它们了。我只需要转到mysite.com/hotel/pacific
即可显示该页面。我可以在文件夹中创建任意数量的页面,只需添加其操作代码即可。