在Yii2 Advanced模板中共享前端和后端之间的资产

时间:2016-05-11 06:45:57

标签: yii2 assets

我一直在尝试从项目的前端和后端加载一个简单的CSS(custom.css),这并不是一个真正的痛苦。

css位于:

    frontend/views/web/css/custom.css

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

<?php

namespace frontend\assets;

use yii\web\AssetBundle;

/**
 * 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 = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
}

所以我只是认为位于后端的AppAsset文件应如下所示:

    <?php

namespace frontend\assets;

use yii\web\AssetBundle;

/**
 * Main backend application asset bundle.
 */
class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
        'css/custom.css',
    ];
    public $js = [
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
}

但是我在加载后端索引时得到的是:

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

对于noob问题表示歉意,感谢您提前。只是想在前端和后端之间共享一个CSS。

3 个答案:

答案 0 :(得分:0)

执行此操作的一种直接方法是在app root下拥有一个通用的Web可访问文件夹。像/ assets这样的东西,你可以从BackEnd和FrontEnd访问它们。您需要编辑.htaccess以允许此操作。

  

仅当设置了$ sourcePath并且未设置$ basePath和$ baseUrl时,Yii2才会发布资产(!)

因此:

use yii\web\AssetBundle;

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 = [
   // 'yii\web\YiiAsset', 
   // 'yii\bootstrap\BootstrapAsset',
 ];
}

在主要布局中:

use frontend\assets\AppAsset;
   ...
AppAsset::register($this);

答案 1 :(得分:0)

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

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

您还可以在资产包中添加完整路径

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

答案 2 :(得分:0)

如果要加载共享资源,即js或css,在YourAsset类中,sourcePath必须是“@ yourSource / web /”,  例如,如果要在位于common / web / css /目录中的前端加载css文件,则AppAsset或任何其他自定义资产类共同驻留/必须具有以下变量初始化

public $ sourcePath =“@ common / web”; public $ basePath =“@ common”;

注意:“@ewbroot”路径&amp; $ baseUrl =“@ web”将定位到您当前的访问路径,在这种情况下它是前端 &安培;会加载它 “本地主机/ YII应用/前端/ CSS / filename.css” 所以你必须省略它。

相关问题