在Yii 2中加载jQuery等核心脚本

Bre*_*ett 6 php jquery yii yii2

我一直在努力弄清楚如何加载jQuery或其他CORE脚本Yii 2.

Yii 1它看来这是方式:

<?php Yii::app()->clientScript->registerCoreScript("jquery"); ?>
Run Code Online (Sandbox Code Playgroud)

在Yii 2中,$ app是Yii的属性,而不是方法,所以上面自然不起作用,但将其更改为:

<?php Yii::$app->clientScript->registerCoreScript("jquery"); ?>
Run Code Online (Sandbox Code Playgroud)

产生此错误:

Getting unknown property: yii\web\Application::clientScript
Run Code Online (Sandbox Code Playgroud)

我找不到关于加载核心脚本的Yii 2的任何文档,所以我尝试了以下内容:

<?php $this->registerJsFile(Yii::$app->request->baseUrl . '/js/jquery.min.js', array('position' => $this::POS_HEAD), 'jquery'); ?>
Run Code Online (Sandbox Code Playgroud)

虽然这会在头部加载jQuery,但Yii也会在需要时加载第二个版本的jQuery ,从而导致冲突错误.

另外,我不想使用Yii的jQuery实现,我宁愿保持自己的,因此这就是我这样做的原因.

如何在没有Yii的情况下加载jQuery和其他核心文件,并在需要时加载它们的副本?

Ali*_*our 9

要禁用Yii2默认资产,您可以参考以下问题:

Yii2禁用Bootstrap Js,JQuery和CSS

无论如何,Yii2资产管理方式不同于Yii 1.x.x.首先,你需要创建一个AssetBundle.作为官方指南示例,在``中创建如下所示的资产包:

namespace app\assets\YourAssetBundleName;
use yii\web\AssetBundle;

class YourAssetBundleName extends AssetBundle 
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [ 
    'path/file.css',//or files 
]; 
public $js=[
     'path/file.js' //or files
];

//if this asset depends on other assets you may populate below array
public $depends = [
];
}
Run Code Online (Sandbox Code Playgroud)

然后,将它们发布在您的视图上:

use app\assets\YourAssetBundleName;
YourAssetBundleName::register($this);
Run Code Online (Sandbox Code Playgroud)

其中$this指的是当前视图对象.


另一方面,如果您只需要将JS文件注册到视图中,您可以使用:

$this->registerJsFile('path/to/file.js');
Run Code Online (Sandbox Code Playgroud)

警予\网络\查看:: registerJsFile()

如果您只需要将CSS文件注册到视图中,您可以使用:

$this->registerCssFile('path/to/file.css');
Run Code Online (Sandbox Code Playgroud)

警予\网络\查看:: registerCssFile()