Yii2:从小部件内部渲染视图

我试过什么?

  1. CustomWidget通过扩展Widget类创建

  2. run方法体的末尾,我尝试通过调用渲染方法的不同方式进行放置。

  3. 我试过这种方法

$this->render( '//widgets/custom' )

$this->render( 'custom' )

$this->render( '@frontend/views/widgets/custom' )

$this->renderFile(/*absolute path to file*/)

但这一切都是徒劳的。

和另一个观点,例如

$this->render('//site/404') - 作品

我想也许是小部件搜索与所有其他视图不同的目录的问题。我已经覆盖了Widget方法getViewPath并有意返回了我的观点的路径。默认情况下getViewPath返回 .../components/views。但错误仍然存在。我试图将小部件目录放置到组件/视图中,但没有结果。

一段CustomWidget代码

class CustomWidget extends Widget {

    public function run() {

        return $this->render( '/widgets/custom' );

    }

}

对于解决此问题的任何线索、建议和建议,我将不胜感激!


隔江千里
浏览 133回答 3
3回答

炎炎设计

您可以在小部件内呈现如下所示的视图,我views/site/about.php在以下示例中使用该视图echo \Yii::$app->view->render('@app/views/site/about');您也可以使用别名或仅/site/about在上一行中使用,但请注意开头/很重要,以防您尝试从应用程序的view文件夹加载视图,否则它将指向加载小部件的当前视图文件夹。Yii2 可用的路径别名列表basic和advanced-app。Yii2 基本应用@app:您的应用程序根目录@vendor:您的根应用程序安装目录中的供应商目录@runtime:您的应用程序文件运行时/缓存存储文件夹@web:您的应用程序基本 url 路径@webroot:您的应用程序网络根@tests:您的控制台测试目录Yii2 高级应用@app:您的应用程序根目录(前端或后端或控制台,取决于您从何处访问它)@vendor:您的根应用程序安装目录中的供应商目录@runtime:您的应用程序文件运行时/缓存存储文件夹@web:您的应用程序基本 url 路径@webroot:您的应用程序网络根@tests:您的控制台测试目录@common:根应用程序安装目录中公共根文件夹的别名@frontend:根应用程序安装目录中前端根文件夹的别名@backend:您的根应用程序安装目录中的后端根文件夹的别名@console: 根应用程序安装目录中控制台根文件夹的别名

largeQ

除非您使用别名,否则 render 不会识别与其各自控制器无关的相对路径。因此,如果您想使用相对于组件或小部件的路径,例如:小部件/MyWidget/MyWidget.php小部件/MyWidget/views/custom.php在 MyWidget.php 中使用它:$this->renderFile(dirname(__FILE__). '/widgets/custom.php' )

缥缈止盈

问题是ftp和php用户有不同的组。我通过ftp创建了文件,该文件的组与php用户开始时的组不同。更改组widgets/custom.php和目录组widgets以适合php并设置权限以0770修复该问题
打开App,查看更多内容
随时随地看视频慕课网APP