在Yii2 AdvancedPHP框架中设置“ request baseUrl”后,无法设置“ AppAsset baseurl”

问题描述

我正在使用具有前端和后端的Yii2 Advanced,我正在使用两个域来分别访问前端和后端。

出于某种原因,我向后端添加一个baseUrl(/admin),这将导致诸如http://backend.example.com/controller/action之类的链接更改为backend.example.com/admin/controller/action,在此更改之后,可以正确加载页面

'components' => [
    'request' => [
        'csrfParam' => '_csrf-backend',//All requests will add "/admin",e.g:
        //backend.example.com/controller/action will change to
        //backend.example.com/admin/controller/action
        'baseUrl' => '/admin',],

但是它引起了另一个问题:资产无法加载,导致资产也添加/admin

enter image description here

我尝试在baseUrl中更改AppAssets中的backend/assets/AppAsset.PHP,但是没有用

<?PHP

namespace backend\assets;

use yii\web\AssetBundle;

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

它的行为就像$baseUrl不存在一样,无论我设置为$baseUrl的值是什么,页面仅不断请求/admin/assets/86321cf/xxxx.js,如何删除/admin通过修改backend/assets/AppAsset.PHP中的设置?

如果我使用registerJsFile()方法将js注册页面

$this->registerJsFile('plugins/ImageViewer/imageviewer.min.js',['position' => View::POS_END,'depends'=>JqueryAsset::class]);

它正在加载正确的路径(这意味着不将/admin添加到路径)

enter image description here

所以我想知道如何通过更改backend/assets/AppAsset.PHP的配置来让页面加载正确的资产路径,还是可以通过更改其他文件中的配置来解决该问题?

解决方法

资产中的

$ baseUrl-指定与目录basePath相对应的URL。与basePath一样,如果您指定sourcePath属性,则资产管理器将发布资产并相应地覆盖此属性。 尝试在baseUrl中写@app/backend/web 因为在我看来@web分配给请求后将等于/ admin

,

好吧,经过大量的搜索和询问,我自己解决了这个问题,事实证明我们可以通过这种方式在backend/assets/AppAsset.php中设置main.php的{​​{1}}

'components' => [
    'assetManager' => [
        //after settting components.request.baseUrl='/admin',the assets url will automatically add "/admin" to its url
        //to avoid this,we can set the asset baseUrl in components.assetManager.baseUrl,set it to '/assets'
        'baseUrl' => '/assets',],'request' => [
        'csrfParam' => '_csrf-backend',//All requests will add "/admin",e.g:
        //www.example.com/controller/action will change to
        //www.example.com/admin/controller/action
        'baseUrl' => '/admin',// other configs....
],

这两个链接启发了我:
Yii - Assets
Override Yii2 assetManager config in controller