2

我在前端有一条类似于 /actions/users/someaction 的路径,我想从后端使用 Bootstrap-Asset(位于 /backend/web/assets/xxxxxx/)。

所以我创建了一个名为“ActionAsset”的资产,其内容如下:

class ActionAsset extends AssetBundle
{
    public $basePath = '@backend';
    public $baseUrl = '@web/backend';
    public $css = [
        'css/external.css',
        'css/overwrite-bootstrap.css',
    ];
    public $js = [
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BackendBootstrapAsset',
    ];
}

包含的 CSS 工作正常,但依赖项始终保存在 /frontend/web/assets/ 中。我的问题是(我真的搜索了好几个星期)如何将此位置更改为 /backend/web/assets。

4

2 回答 2

1

您需要定义$sourcePath. Yii2 AssetManager 将复制(或符号链接)您当前的 web/assets/ 文件夹中的资产。

文档

sourcePath:指定包含此捆绑包中资产文件的根目录。如果根目录不可通过 Web 访问,则应设置此属性。否则,您应该设置 basePath 属性和 baseUrl。这里可以使用路径别名。

因此,将您的代码更改为:

class ActionAsset extends AssetBundle
{
    public $sourcePath = '<path to your asste content>';
    public $css = [
        'css/external.css',
        'css/overwrite-bootstrap.css',
    ];
    public $js = [
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BackendBootstrapAsset',
    ];
}

或者:只需覆盖您的 asstetbundle@frontend/asset并相应地设置$sourcePath属性:

class FrontendActionAsset extends ActionAsset
{
    public $sourcePath = '<path to your asste content>'; //you don't need more
}
于 2017-05-16T10:25:48.763 回答
0

资产发布 如前所述,如果资产包位于 Web 不可访问的目录中,则在将包注册到视图时,其资产将被复制到 Web 目录。此过程称为资产发布,由资产管理器自动完成。

默认情况下,资产发布到与 URL @web/assets 对应的目录@webroot/assets。您可以通过配置 basePath 和 baseUrl 属性来自定义此位置。

如果您的操作系统和 Web 服务器允许,您可以考虑使用符号链接,而不是通过文件复制来发布资产。可以通过将 linkAssets 设置为 true 来启用此功能。

return [
    // ...
    'components' => [
        'assetManager' => [
            'linkAssets' => true,
        ],
    ],
];

通过上述配置,资产管理器将在发布资产包时创建指向资产包源路径的符号链接。这比文件复制更快,还可以确保发布的资产始终是最新的。

https://www.yiiframework.com/doc/guide/2.0/en/structure-assets

于 2019-05-14T09:50:25.603 回答