簡體   English   中英

Yii 2靜態頁面

[英]Yii 2 static pages

我無法顯示靜態頁面。 嘗試做它作為DOC這里所描述- http://stuff.cebe.cc/yii2-guide.pdf但是當我使prettyurl,它不工作(第100頁上)。

在urlManager規則中添加:

'urlManager' => array(
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => array(
        '' => 'site/index',
        'login' => 'site/login',
        'contacts' => 'site/contact',
        '<view:(break)>'=>'/site/page?&view=<view>',
    ),
),

然后在SiteController中添加:

public function actions()
    {
        return [
            ...
            'page' => [
                'class'=>'yii\web\ViewAction',
            ],
        ];
    }

然后創建views / site / pages / break.php

<h1>View static page Break</h1>

但我收到一個錯誤: 未找到(#404)無法解決該請求:site / page?&view = break

如果我禁用prettyUrl:

//'enablePrettyUrl'=>true

然后我可以看到我的頁面鍵入url:index.php?r = site / page&view = break

ViewAction有什么問題?

我認為您在執行網址的規則部分管理錯誤。 嘗試這個

'urlManager' => [
    'class' => 'yii\web\UrlManager',
    // Disable index.php
    'showScriptName' => false,
    // Disable r= routes
    'enablePrettyUrl' => true,
    'rules' => array(
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
    ),
    ],

規則部分應該很重要。

我解決了我的問題。 使用這樣的行:

'<view:(break)>' => 'site/page',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',

我強制使用頁面的特定名稱進行查看,在我的情況下為“中斷”,因為無法使用此名稱

'<view:[a-zA-Z0-9-]+>' => 'site/page',

(這會導致其他規則崩潰。)我認為可以更好地創建擴展UrlRule的“自己的規則類”,但是現在我不需要了。

我已經嘗試過這種方式(沒有規則規范):

        'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => 'false'
    ],

解決方法很簡單:

  1. web.php代碼就像這樣的'rules' => [
    'site/page/<view:[a-zA-Z0-9-]+>' => 'site/index',
    'rules' => [
    'site/page/<view:[a-zA-Z0-9-]+>' => 'site/index',

  2. 在SiteController中,不要使用action()函數,而是:

public function actionIndex ($view) { return $this->render('/site/pages/' . $view); } catch (InvalidParamException $e) { throw new HttpException(404); } public function actionIndex ($view) { return $this->render('/site/pages/' . $view); } catch (InvalidParamException $e) { throw new HttpException(404); }

  1. 如果views / site / pages /中存在視圖contacts.php,則URL為yourdomain / basic / web / site / page / contact

4,感謝samdark及其文章https://github.com/yiisoft/yii2/issues/2932

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM