php - Yii2组合和压缩 Assets 不适用于 bundle

标签 php compression yii2 assets

我无法理解 Yii2 Assets 的组合和压缩是如何工作的。我阅读了指南中的部分(http://www.yiiframework.com/doc-2.0/guide-structure-assets.html),但我仍然无法使其正常工作,或者至少无法理解这件事的基本原理。

从那里给出的示例中,我无法重现该示例并解决以下情况。

应用 Assets 包含应用程序的主要 css/js。共享和基本代码应该包含在此处。这个依赖于另一个名为 ExternalAssets 的文件,该文件又依赖于 YiiAsset、BootstrapAsset 等。

结帐 Assets 包含仅与结帐流程相关的代码。上述内容也应该包含在内,因为它添加了自定义功能,但仅与本节相关。 $ 取决于 AppAsset。

产品 View Assets 与上述相同,但与给定产品的可视化有关。

Assets 配置如下:

'bundles' => [
    'yii\web\JqueryAsset',
    'rmrevin\yii\fontawesome\AssetBundle',
    'yii\web\YiiAsset',
    'yii\bootstrap\BootstrapAsset',
    'yii\bootstrap\BootstrapPluginAsset',
    'yii\widgets\ActiveFormAsset',
    'frontend\assets\ExternalAssets',
    'frontend\assets\AppAsset',
],
'targets' => [
    'app' => [
        'class' => 'yii\web\AssetBundle',
        'basePath' => '@webroot/assets',
        'baseUrl' => '@web/assets',
        'js' => 'js/app-{hash}.js',
        'css' => 'css/app-{hash}.css',
        'depends' => [ ],
    ],
]

在这一点上,我可以压缩所有应该是常见的(尽管可能会删除一些不必要的文件),但是在使用 ProductViewAsset 或 CheckoutAsset 的页面中,其中包含的文件不会以相同的方式压缩.

也许可以在结帐过程中将所有内容压缩到单个文件(公共(public)数据+结帐数据),或者由于缓存原因而不会。不知道这是否可能,但我无法使其工作。据我所知,这是。我尝试这样做是因为它看起来很自然,但我开始遇到这样的错误 PHP 通知 'yii\base\ErrorException' 和消息 'Undefined index: frontend\assets\ExternalAssets' 尝试制作不同的 Assets 包组时:
'targets' => [
    'app' => [
        'class' => 'yii\web\AssetBundle',
        'basePath' => '@webroot/assets',
        'baseUrl' => '@web/assets',
        'js' => 'js/app-{hash}.js',
        'css' => 'css/app-{hash}.css',
        'depends' => [
           // 'frontend\assets\ExternalAssets'
        ],
    'checkout' => [
        'class' => 'yii\web\AssetBundle',
        'basePath' => '@webroot/assets',
        'baseUrl' => '@web/assets',
        'js' => 'js/checkout-{hash}.js',
        'css' => 'css/checkout-{hash}.css',
        'depends' => [
           'frontend\assets\AppAssets'
        ],
    ],

也许我在这里看到了错误的方法,但我无法完全弄清楚这样做的最佳方法是什么。我认为将所有内容压缩到单个文件应该比不合并和压缩文件更好,但我认为在这种情况下可以优化合并和压缩方法。

谢谢!

最佳答案

我不确定我是否理解您提出的问题,这就是我将其解释为您的要求。
在您的站点 Controller 中执行正常操作,调用 View “站点/ Assets /”

    public function actionAssets()
{
    return $this->render('assets');
}
像这个例子一样安排你的 View -
<?php
use dmstr\web\AdminLteAsset;
use backend\assets\AppAsset;
use dosamigos\fileupload\FileUploadPlusAsset;
use dosamigos\fileupload\FileUploadAsset;
use dosamigos\gallery\GalleryAsset;
use dosamigos\fileupload\FileUploadUIAsset;
use dosamigos\gallery\DosamigosAsset;
use budyaga\cropper\assets\CropperAsset;
use kartik\base\Html5InputAsset;
use kartik\base\WidgetAsset;
use kartik\form\ActiveFormAsset;
use kartik\affix\AffixAsset;
use kartik\alert\AlertAsset;
use kartik\color\ColorInputAsset;
use kartik\date\DatePickerAsset;
use kartik\datetime\DateTimePickerAsset;
use kartik\depdrop\DepDropAsset;
use kartik\depdrop\DepDropExtAsset;
use kartik\file\FileInputThemeAsset;
use kartik\growl\GrowlAsset;
use kartik\base\AnimateAsset;
use kartik\select2\Select2Asset;
use kartik\sidenav\SideNavAsset;
use kartik\spinner\SpinnerAsset;
use kartik\switchinput\SwitchInputAsset;
use kartik\time\TimePickerAsset;
use kartik\touchspin\TouchSpinAsset;
use kartik\typeahead\TypeaheadAsset;
use kartik\grid\GridViewAsset;
use kartik\dialog\DialogAsset;

$view = $this;

AdminLteAsset::register($this);
AppAsset::register($this);

FileUploadPlusAsset::register($view);
FileUploadAsset::register($view);
GalleryAsset::register($view);
FileUploadUIAsset::register($view);
DosamigosAsset::register($view);
CropperAsset::register($view);
Html5InputAsset::register($view);
WidgetAsset::register($view);
ActiveFormAsset::register($view);
AffixAsset::register($this);
AlertAsset::register($view);
ColorInputAsset::register($view);
DatePickerAsset::register($view);
DateTimePickerAsset::register($view);
DepDropAsset::register($view);
DepDropExtAsset::register($view);
FileInputThemeAsset::register($view);
GrowlAsset::register($view);
AnimateAsset::register($view);
Select2Asset::register($view);
SideNavAsset::register($this);
SpinnerAsset::register($view);
SwitchInputAsset::register($view);
TimePickerAsset::register($view);
TouchSpinAsset::register($view);
TypeaheadAsset::register($view);
GridViewAsset::register($view);
DialogAsset::register($view);

?>
<?php $this->beginPage() ?>
<?php $this->beginBody() ?>
<p>Done</p>
<?php $this->endBody() ?>
<?php $this->endPage() ?>
然后确保在进行部署之前点击此链接以生产以重新编译 Assets 。

关于php - Yii2组合和压缩 Assets 不适用于 bundle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34567003/

相关文章:

php - cakephp2.X 编辑 View 验证

php - MySQL 返回具有递增计数的行的多个副本

php - 如何在 mysql 数据库中存储 Twitter 状态 id_str

c# - GZIP解压C# OutOfMemory

php - 使用 Yii2 框架 Ajax 请求太慢

php - js 不工作 - Controller 和 js 文件

r - 在 R 中自动读取 zip 文件

php - 如何判断 ob_gzhandler 是否正常工作?

Yii2 参数访问公共(public)目录中的本地配置文件

image - Yii2 如何显示保存在 web 文件夹中的图像