【问题标题】:Yii2 location from dependencies in custom assetYii2 位置来自自定义资产中的依赖项
【发布时间】:2017-05-15 20:38:07
【问题描述】:

我在前端有类似 /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。

【问题讨论】:

  • 您使用的是什么命名空间?前端还是后端?
  • 前端,但是将 ActionAsset 切换到后端没有任何区别。

标签: yii2 bundle assets depends


【解决方案1】:

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

来自docs

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',
    ];
}

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

class FrontendActionAsset extends ActionAsset
{
    public $sourcePath = '<path to your asste content>'; //you don't need more
}

【讨论】:

  • 好吧,我已经试过了。如果我采用 $sourcePath = '@backend/web' 之类的路径,则不会在 /backend/web 中保存任何内容 - 它仍将保存在 frontend/web 中。但我的普通 CSS 也会保存在 frontend/web/assets/xxxxxx 中,我不希望这样。
  • 澄清:当您运行后端应用程序时,只有内容backend/web/* 是或应该是可读的。如果您启动前端应用程序,您的应用程序所需的所有资产都必须复制到frontend/web/assets。您不应该从前端访问backend/web/assets 中的后端资产(如果可能,不知道)。如果您不想复制内容,请编辑配置:'components' =&gt; ['assetManager' =&gt; ['linkAssets' =&gt; true]] 或将 AssetClass 中的 publishOptions 设置为 [linkAssets' =&gt; true]。 AssetManager 将符号链接您的资产。尝试清空您的资产文件夹。
  • 谢谢你,对我帮助很大。
【解决方案2】:

资产发布 如前所述,如果资产包位于 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多