如何在子文件夹中渲染一种视图



刚刚安装了yii2框架并使用它,但我似乎无法将其与位于文件夹中的文件一起使用。

所有其他页面(索引,联系人,关于,索引等(都在views/site文件夹中,但是我在称为blogviews文件夹中添加了一个新文件夹,该文件夹包含一个称为index.php的新视图。

文件夹结构:

project
- views
-- site
--- index.php
--- about.php
--- (more files)
-- blog
--- index.php

class SiteController extends Controller
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout'],
                'rules' => [
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }
    /**
     * @inheritdoc
     */
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yiiwebErrorAction',
            ],
            'captcha' => [
                'class' => 'yiicaptchaCaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }
    public function actionBlog()
    {
        // not working
        return $this->render('blog/index');
    }
}

使用路径简单地使用名称Blog创建控制器,只需添加

return $this->render('/blog/index')

SiteController中的新操作actionBlog()内部。

请记住,如果您不遵循Yii使用controllersview的约定,请在指定视图时使用尾随/启动路径,如果您不添加尾随的斜线,它将尝试找到您指定的路径渲染方法 views/site目录和添加尾斜线将从views root Directory搜索。

yii2根据其名称匹配将视图目录设置为控制器。因此,您可以拥有一个名为BlogController的控制器,然后简单地呈现索引视图:

class BlogController extends Controller
{
    ...
    public function actionBlog() // OR public function actionIndex()
    {
        // not working
        return $this->render('index');
    }
}

yii2视图路径与@saberi所述相对于控制器。看看文档

如果视图名称以单个斜杠/开头,则视图文件路径为 通过将视图名称与当前的视图路径前缀形成 活动模块。如果没有活动模块, @app/view/viewname将会 使用。例如,/用户/创建将解决 @app/模块/user/views/user/create.php,如果当前活动 模块是用户。如果没有活动模块,则视图文件路径将 BE @app/views/user/create.php。

所以最好的是创建一个blogcontroller,但是,如果您确实需要,可以通过$this->render('/blog/index')从SiteController渲染(再次不推荐(来实现这一目标,甚至通过sitecontroller致电/重定向到Blog Controller,这也可能会变得凌乱,但可能。

相关内容

最新更新