【问题标题】:Yii : How to change default path of render function?Yii:如何更改渲染函数的默认路径?
【发布时间】:2014-09-01 01:34:58
【问题描述】:

在 Yii 中,当您在小部件或控制器中使用渲染时,您只需将文件名(不带 .php)作为参数,如下所示:

$this->render('forum', array('data'=>$data));

例如当我在 Class extends CWidget 中使用这个函数时,Yii 会尝试在 /protected/components/views 中找到 forum.php

如何将此默认路径更改为其他位置?对于我所有的小部件类(所有类都扩展 CWidget)?如果我只想更改某些小部件的路径怎么办?

【问题讨论】:

    标签: php yii


    【解决方案1】:

    你需要重写CWidget类的getViewPath方法

    例如:-

    class CMyWidget extends CWidget{
    
    // Returns the directory containing the view files for this widget.
    
    public function getViewPath($checkTheme=false){
    
    // this method does the task of finding the view files containing directory.
    // so override it
    
    }
    
    // This method will look for the view under the widget's  getViewPath viewPath.
    public function getViewFile($viewName)
        {
    // override it
    }
    
        }
    

    最后,在创建小部件时,您必须扩展 CMyWidget 类而不是 CWidget

    【讨论】:

    • 我可以将 getViewPath() 方法放在我创建的小部件中吗?还是我应该使用 setViewPath() 方法来更改设置?
    • 是的,您可以覆盖您创建的小部件中的 getViewPath(),但如果您必须创建许多小部件,则您必须在每个小部件中覆盖相同的小部件。我认为这会有问题
    【解决方案2】:

    你可以简单地做一个$this->render('//path/forum', array('data'=>$data));,其中//指向主视图目录,通常是protected/views

    您还可以使用带点表示法的别名路径:

    $this->render('application.myviews.test'); // would render protected/myviews/test.php
    $this->render('webroot.test'); // would render htdocs/test.php
    

    【讨论】:

    • 我的视图文件在受保护/视图之外怎么样??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2019-12-03
    • 2021-06-19
    • 2015-11-12
    • 1970-01-01
    • 2019-10-16
    相关资源
    最近更新 更多