了解Yii2在使用回退时如何找到主题资源

Bre*_*ett 14 php yii yii2

我正在使用Yii2并一直在阅读主题主题继承 ; 但有一些问题:

请考虑以下示例:

'view' => [
    'theme' => [
        'pathMap' => [
            '@app/views' => [
                '@app/themes/current',
                '@app/themes/default',
            ],
        ],
        'baseUrl' => '@web/themes/current',
        'basePath' => '@webroot/themes/current',
    ],
],
Run Code Online (Sandbox Code Playgroud)

现在,假设我们请求主题文件foo; 据我了解,首先按以下顺序查找:

  • @app/themes/current/foo.php
  • @app/themes/default/foo.php
  • @app/views/foo.php

现在想象foo.php@app/themes/current/主题中找不到,所以它会使用找到的文件@app/themes/default/.

现在,考虑到baseUrlbasePath设置我有点困惑如何在这些情况下使用它们.

现在,想象一下foo.php引用文件里面的图像文件,这不是仍然会尝试查找@web/themes/current/images/myImage.jpg而不是@web/themes/default/images/myImage.jpg吗?

Ngô*_*hao 4

在这种情况下,basePath就毫无价值了。因为basePath仅在 pathMap为空时应用。
basePath不是后备,它是一个快捷方式pathMap,当你只有一个主题时快速使用。

'pathMap' => [
    '@app/views' => [
         '@app/themes/current/views',
    ],
],
Run Code Online (Sandbox Code Playgroud)

相当于:

'basePath' => '@app/themes/current', 
Run Code Online (Sandbox Code Playgroud)

(Yii 知道文件夹@app/themes/current/views存在) : 当你调用视图文件

baseUrl时返回。$this->theme->getBaseUrl()多主题的价值较低。

关于静态文件的后备。主题回退并不是为此目的而设计的。