如何在Yii2模块中包含图像

如何在Yii2模块中包含图像,yii2,yii2-module,Yii2,Yii2 Module,无法提供Yii2模块内部视图中图像的正确路径。脚本和样式已正确加载 模块结构: |-assets | ↳Asset.php |-controllers |-models |-public | |-css | | ↳styles.css | |-js | | ↳script.js | |-img | ↳image.gif |-views | ↳view.php |-Module.php class Asset extends AssetBundle { public $so

无法提供Yii2模块内部视图中图像的正确路径。脚本和样式已正确加载

模块结构:

|-assets
|  ↳Asset.php
|-controllers
|-models
|-public
| |-css
| |  ↳styles.css
| |-js
| |  ↳script.js
| |-img
|    ↳image.gif
|-views
|  ↳view.php
|-Module.php
class Asset extends AssetBundle {
    public $sourcePath = '@app/modules/scrapy/public';
    public $css = ['css/styles.css'];
    public $js = ['js/scrapy.js'];
}
public function init() {
    parent::init();
    $this->setAliases([
        '@modulename' => '@app/modules/module',
    ]);
}

public function getViewPath() {
    return '@modulename/views/';
}
Asset.php:

|-assets
|  ↳Asset.php
|-controllers
|-models
|-public
| |-css
| |  ↳styles.css
| |-js
| |  ↳script.js
| |-img
|    ↳image.gif
|-views
|  ↳view.php
|-Module.php
class Asset extends AssetBundle {
    public $sourcePath = '@app/modules/scrapy/public';
    public $css = ['css/styles.css'];
    public $js = ['js/scrapy.js'];
}
public function init() {
    parent::init();
    $this->setAliases([
        '@modulename' => '@app/modules/module',
    ]);
}

public function getViewPath() {
    return '@modulename/views/';
}
Module.php的片段:

|-assets
|  ↳Asset.php
|-controllers
|-models
|-public
| |-css
| |  ↳styles.css
| |-js
| |  ↳script.js
| |-img
|    ↳image.gif
|-views
|  ↳view.php
|-Module.php
class Asset extends AssetBundle {
    public $sourcePath = '@app/modules/scrapy/public';
    public $css = ['css/styles.css'];
    public $js = ['js/scrapy.js'];
}
public function init() {
    parent::init();
    $this->setAliases([
        '@modulename' => '@app/modules/module',
    ]);
}

public function getViewPath() {
    return '@modulename/views/';
}

在视图文件中注册模块资产:

<?php
// include module asset class
use app\modules\mycoolmodule\assets\Asset;

// register module asset in view and store it to a variable
$myAssetBundle = Asset::register($this);
?>

现在从img资产文件夹访问图像:

<img src="<?= $myAssetBundle->baseUrl . '/img/image.gif'; ?>" alt="image" />
baseUrl'/img/image.gif';?>“alt=”image“/>
因此,您需要的是资产包的动态url

PS:
app
资产和
module | widgets
资产之间存在差异:

看起来您的资产已发布到web可访问的位置,因此生成了指向它们的路径。要获取当前资产,您需要通过
assetManager
组件。您可能应该使用
\yii\helpers\Url::to($myAssetBundle->baseUrl./img/image.gif'));
因为
$baseUrl
属性可能包含别名。对于模块
$baseUrl
未设置,则设置
$sourcePath