在Yii2高级模板中在前端和后端之间共享资产



我一直在尝试从项目的前端和后端加载一个简单的CSS(custom.CSS),但我并没有真正感到痛苦。

css位于:

    frontend/views/web/css/custom.css

它在前端加载时没有问题。。。这是位于前端的AppAsset文件:

<?php
namespace frontendassets;
use yiiwebAssetBundle;
/**
 * Main frontend application asset bundle.
 */
class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
        'css/site.css',
        'css/custom.css',
    ];
    public $js = [
    ];
    public $depends = [
        'yiiwebYiiAsset',
        'yiibootstrapBootstrapAsset',
    ];
}

所以我只是觉得位于后端的AppAsset文件应该是这样的:

    <?php
namespace frontendassets;
use yiiwebAssetBundle;
/**
 * Main backend application asset bundle.
 */
class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
        'css/custom.css',
    ];
    public $js = [
    ];
    public $depends = [
        'yiiwebYiiAsset',
        'yiibootstrapBootstrapAsset',
    ];
}

但当加载后端索引时,我得到的只是:

http://localhost:8888/backend/web/css/custom.cssFailed to load resource: the server responded with a status of 404 (Not Found)

很抱歉收到noob的问题,并提前表示感谢。只是想在前端和后端之间共享一个css。

实现这一点的一种直接方法是在应用程序根目录下创建一个通用的web可访问文件夹。类似/assets的东西,您可以从后端和前端访问。你需要编辑你的.htaccess才能允许这样做。

Yii2只有在设置了$sourcePath,并且未设置$basePath和$baseUrl的情况下才会发布资产(!)

因此:

use yiiwebAssetBundle;
class AppAsset extends AssetBundle
{
   public $sourcePath = '@app/assets/app';
 public $css = [
   'css/openbook.css',
   'fontello/css/fontello.css',
   'fontello/css/animation.css'
 ];
 public $js = [
   'js/plug.openbook.js',
   'js/plug.interpret.js',
   'js/plug.drop.message.js'
 ];
 public $depends = [
   // 'yiiwebYiiAsset', 
   // 'yiibootstrapBootstrapAsset',
 ];
}

在主布局中:

use frontendassetsAppAsset;
   ...
AppAsset::register($this);

如果你想加载共享资源,即js或css,在YourAsset类中,sourcePath必须是"@yourSource/web/",例如,如果你想在前端加载一个位于common/web/css/目录中的css文件,你的AppAsset或任何其他自定义资产类都位于common/必须有以下变量初始化

public$sourcePath="@common/web";public$basePath="@common";

注意:"@ewbroot"路径&baseUrl="@web"将定位到您当前的访问路径,在本例中为前端&将加载它"localhost/yii application/frontend/css/filename.css"所以你必须省略它。

您可以在任何视图或布局上注册文件本身

<?php $this->registerCssFile('http://domain.com/frontend/web/path/file.css');?>

您也可以在资产捆绑中添加完整路径

public $css = [
    'http://domain.com/frontend/web/path/file.css',
];

最新更新