问题描述
我正在使用具有前端和后端的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
我尝试在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
添加到路径)
所以我想知道如何通过更改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