╃巡洋艦㊣ 2011-03-04 14:50:20 3809次浏览 2条回复 0 0 0

在web应用中,我们经产更需要显示静态页,如“关于我们”等,这些文件通常是静态页,通常有如下几种处理方法:

1.把独立的html文件存在Web服务器能直接访问的目录下。这种方案的缺点是很难维护网页布局以及和动态页的连接.

2.可以自己写action赖渲染view文件处理每一个静态页,这样解决了layout问题,但是为每一个页写一个单独的action,特别是这个action仅仅处理一个静态文本,非常麻烦。

3.使用Yii内置的一个CViewAction来服务所有这些页。

下面就介绍第三种方法: 首先,建立以个controller类如DocController,覆盖actions方法

public function actions()
{
    return array(
        'page'=>array(
            'class'=>'CViewAction',
        ),
    );
}

根据官方指南,以上代码声明了一个外部action类CViewAction.

然后,生成目录 protected/views/site/pages.

最后,在该目录下存储一个文件叫about.php,内容为:"about this site" ,此时这些页将使用应用的默认布局文件。因此该文件仅仅描述本页相关内容。

http://www.yourhost.com/index.php?r=doc/page&view=about

如果有很多静态页,可以将其放在子目录里,假设有一个有静态页在 protected/views/site/pages/help/contact.php:

http://www.yourhost.com/index.php?r=site/page&view=help.contact

当然,我们也可以定制CViewAction的行为,察看API文档了解更多有关于CViewAction

  • 回复于 2011-12-08 17:25 举报

    问一个关于 action覆盖的问题。
    通过 return array('admin'=>'application.controllers.test.AdminAction') 之后
    原先的$this->render(),
    怎么表示呢

  • 回复于 2015-06-15 15:54 举报

    我新建了个QuestionController

    public function actions()
    {
        return array(
            'language'=>array(
                'class'=>'CViewAction',
            ),
        );
    }
    

    把page改成了language,在views下新建了一个questions文件夹,然后把我的视图文件java.php放进questions文件夹里。之前

    $this->widget('zii.widgets.CMenu',array(
        'items'=>array(
            array('label'=>'Java', 'url'=>array('/question/language', 'view'=>'java')),
        ),
    ));
    

    这一段已经在前一个视图文件中写好,但最后还是

    Error 404
    The requested view "java" was not found.
    

    我明明已经放入了视图,却说没找到,为什么?
    @巡洋舰

您需要登录后才可以回复。登录 | 立即注册