이 글에서는 주로 PHP Yii 프레임워크의 프런트 엔드 리소스 패키지 사용을 소개하고 Yii에서 일반적으로 사용되는 JavaScript 및 CSS 리소스를 나열합니다. 필요한 친구는 이를 참조할 수 있습니다.
Yii의 리소스는 웹 페이지와 관련된 파일입니다. CSS 파일, JavaScript 파일, 그림 또는 비디오 등이 될 수 있습니다. 리소스는 웹에 액세스할 수 있는 디렉터리에 위치하며 웹 서버에서 직접 호출됩니다.
프로그램을 통해 리소스를 자동으로 관리하는 것이 더 좋습니다. 예를 들어, 페이지에서 yiijuiDatePicker 위젯을 사용하면 필요한 CSS 및 JavaScript 파일을 수동으로 찾아 포함하도록 요구하는 대신 자동으로 포함됩니다. 업그레이드 위젯을 추가하면 자동으로 새 버전의 리소스 파일이 사용됩니다. 이 튜토리얼에서는 Yii에서 제공하는 강력한 리소스 관리 기능을 자세히 설명합니다.
Resource package
Yii는 리소스 패키지의 리소스를 관리합니다. 리소스 패키지는 단순히 디렉터리에 있는 리소스 모음입니다. 리소스 패키지가 뷰에 등록되면 웹을 렌더링할 때 패키지에 포함된 리소스가 포함됩니다. 페이지.CSS 및 JavaScript 파일.
리소스 패키지 정의
리소스 패키지는 yiiwebAssetBundle을 상속하는 PHP 클래스로 지정됩니다. 패키지 이름은 리소스 패키지 클래스에서 자동으로 로드될 수 있는 PHP 클래스 이름입니다. 리소스, 리소스에 포함된 CSS 및 JavaScript 파일, 다른 패키지의 종속성.
다음 코드는 기본 애플리케이션 템플릿에서 사용하는 기본 리소스 패키지를 정의합니다.
<?php namespace app\assets; use yii\web\AssetBundle; 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', ]; }
위와 같이 AppAsset 클래스에서 지정한 리소스 파일은 @webroot 디렉터리에 위치합니다. 리소스 패키지에는 JavaScript 파일이 아닌 CSS 파일 css/site.css가 포함되어 있으며 yiiwebYiiAsset 및 yiibootstrapBootstrapAsset이라는 두 개의 다른 패키지를 사용합니다. yiiwebAssetBundle의 속성에 대한 자세한 내용은 다음과 같습니다.
yiiwebAssetBundle::sourcePath: 루트를 지정합니다. 리소스 파일이 포함된 패키지의 디렉터리. 루트 디렉터리인 경우 웹에서 액세스할 수 없는 경우 이 속성을 설정해야 합니다. 그렇지 않으면 yiiwebAssetBundle::basePath 속성과 yiiwebAssetBundle::baseUrl을 설정해야 합니다. 여기서 경로 별칭을 사용할 수 있습니다.
yiiwebAssetBundle::basePath: 리소스 번들의 리소스 파일을 포함하고 웹에서 액세스할 수 있는 디렉터리를 지정합니다. yiiwebAssetBundle::sourcePath 속성을 지정하면 리소스 관리자가 게시합니다. 패키지의 리소스를 액세스 가능한 웹 액세스로 설정하고 이 속성을 재정의합니다. 리소스 파일이 웹 액세스 가능한 디렉터리에 있는 경우 다시 게시할 필요가 없도록 이 속성을 설정해야 합니다. 여기서 경로 별칭을 사용할 수 있습니다.
yiiwebAssetBundle::baseUrl: yiiwebAssetBundle::basePath 디렉터리에 해당하는 URL을 지정합니다. yiiwebAssetBundle::basePath 속성을 지정하는 경우 리소스 관리자는 이러한 리소스를 게시하고 이 속성을 재정의합니다. 경로 별칭은 여기에서 사용 가능합니다.
yiiwebAssetBundle::js: 리소스 번들의 JavaScript 파일을 포함하는 배열입니다. 슬래시 "/"를 디렉터리 구분 기호로 사용해야 합니다. 각 JavaScript 파일은 다음 두 가지 형식 중 하나로 지정할 수 있습니다.
리소스는 다음과 같이 나눌 수 있습니다.
위치에 따른 소스 리소스: 리소스 파일과 PHP 소스 코드가 함께 배치되며 이러한 소스 리소스를 사용하기 위해 웹에서 직접 액세스할 수 없습니다. 게시된 리소스는 웹에서 액세스할 수 있는 웹 디렉터리에 게시된 리소스가 됩니다. 이 프로세스를 게시 리소스라고 하며 나중에 자세히 소개합니다.리소스 게시: 리소스 파일은 웹을 통해 직접 액세스할 수 있는 웹 디렉터리에 배치됩니다.
외부 리소스: 리소스 파일은 웹 애플리케이션과 다른 웹 서버에 배치됩니다. yiiwebAssetBundle::sourcePath 속성을 지정하면 상대 경로를 사용하는 모든 리소스가 소스 리소스로 간주됩니다. 이 속성이 지정되지 않으면 해당 리소스가 게시된 리소스라는 의미입니다(따라서 yiiwebAssetBundle::basePath 및 yiiwebAssetBundle::baseUrl). Yii가 자신의 위치를 알 수 있도록 지정해야 합니다.推荐将资源文件放到Web目录以避免不必要的发布资源过程,这就是之前的例子指定 yii\web\AssetBundle::basePath 而不是 yii\web\AssetBundle::sourcePath.
对于 扩展来说,由于它们的资源和源代码都在不能Web访问的目录下, 在定义资源包类时必须指定yii\web\AssetBundle::sourcePath属性。
注意: yii\web\AssetBundle::sourcePath 属性不要用@webroot/assets,该路径默认为 yii\web\AssetManager资源管理器将源资源发布后存储资源的路径,该路径的所有内容会认为是临时文件, 可能会被删除。
资源依赖
当Web页面包含多个CSS或JavaScript文件时,它们有一定的先后顺序以避免属性覆盖, 例如,Web页面在使用jQuery UI小部件前必须确保jQuery JavaScript文件已经被包含了, 我们称这种资源先后次序称为资源依赖。
资源依赖主要通过yii\web\AssetBundle::depends 属性来指定, 在AppAsset 示例中,资源包依赖其他两个资源包: yii\web\YiiAsset 和 yii\bootstrap\BootstrapAsset 也就是该资源包的CSS和JavaScript文件要在这两个依赖包的文件包含 之后 才包含。
资源依赖关系是可传递,也就是人说A依赖B,B依赖C,那么A也依赖C。
资源选项
可指定yii\web\AssetBundle::cssOptions 和 yii\web\AssetBundle::jsOptions 属性来自定义页面包含CSS和JavaScript文件的方式, 这些属性值会分别传递给 yii\web\View::registerCssFile() 和 yii\web\View::registerJsFile() 方法, 在视图 调用这些方法包含CSS和JavaScript文件时。
注意: 在资源包类中设置的选项会应用到该包中 每个 CSS/JavaScript 文件,如果想对每个文件使用不同的选项, 应创建不同的资源包并在每个包中使用一个选项集。
例如,只想IE9或更高的浏览器包含一个CSS文件,可以使用如下选项:
public $cssOptions = ['condition' => 'lte IE9'];
这会是包中的CSS文件使用以下HTML标签包含进来:
<!--[if lte IE9]> <link rel="stylesheet" href="path/to/foo.css"> <![endif]-->
为链接标签包含
public $cssOptions = ['noscript' => true];
为使JavaScript文件包含在页面head区域(JavaScript文件默认包含在body的结束处)使用以下选项:
public $jsOptions = ['position' => \yii\web\View::POS_HEAD];
Bower 和 NPM 资源
大多数 JavaScript/CSS 包通过Bower 和/或 NPM管理, 如果你的应用或扩展使用这些包,推荐你遵循以下步骤来管理库中的资源:
修改应用或扩展的 composer.json 文件将包列入require 中, 应使用bower-asset/PackageName (Bower包) 或 npm-asset/PackageName (NPM包)来对应库。
创建一个资源包类并将你的应用或扩展要使用的JavaScript/CSS 文件列入到类中, 应设置 yii\web\AssetBundle::sourcePath 属性为@bower/PackageName 或 @npm/PackageName, 因为根据别名Composer会安装Bower或NPM包到对应的目录下。
注意: 一些包会将它们分布式文件放到一个子目录中,对于这种情况,应指定子目录作为 yii\web\AssetBundle::sourcePath属性值,例如,yii\web\JqueryAsset使用 @bower/jquery/dist 而不是 @bower/jquery。
使用资源包
为使用资源包,在视图中调用yii\web\AssetBundle::register()方法先注册资源, 例如,在视图模板可使用如下代码注册资源包:
use app\assets\AppAsset; AppAsset::register($this); // $this 代表视图对象
如果在其他地方注册资源包,应提供视图对象,如在 小部件 类中注册资源包, 可以通过 $this->view 获取视图对象。
当在视图中注册一个资源包时,在背后Yii会注册它所依赖的资源包,如果资源包是放在Web不可访问的目录下,会被发布到可访问的目录, 后续当视图渲染页面时,会生成这些注册包包含的CSS和JavaScript文件对应的 和