视图加载方法://不加载布局文件
$content = $this->renderPartial('about',['test'=>6]);//为布局文件加载内容
return $this->renderContent($content);//对ajax的请求作出回应
$this->renderAjax('about',['test'=>7]);//显示指定文件
$this->renderFile('full file',['test'=>8]);//先加载about.php里面的内容,然后再将内容整合到布局文件中去最后通过浏览器展示给用户
$this->render('/site/about.php',['test'=>5]);
以上方法的原理以及第一个路径参数的几种写法/*
*原理:
* 1.先生成about.php这个页面
* 2.把1生成的结果作为content变量传到布局文件main.php界面
*
* 以上加载视图文件方法里面的view参数格式有五种:
* 1.别名路径制定view文件
* @app/views/site/about.php
*
* 2双斜杠开头:使用app下面的views
* //site/about.php表示当前app下面的views也就是根目录下的
*
* 3单斜杠开头使用当前module下面的views(换句话说就是你的控制器目录下 的views目录)
* /site/about.php
*
* 4当前controller下的view文件直接使用字符串格式(如:about,login,view ect.),ViewContextInterface接口所返回的页面view
* ViewContextInterface
*
* 5上次所使用的路径
* getViewFile
*/
对第五点的补充:
getViewFile
这是在视图中使用$this->render('about');此处的about指的是上一次使用的
目录下的about视图(也就是,你的控制器中加载过来时使用的目录)
在view视图里面的render方法只加载所指定的页面,不加载布局页面
官方解说上述方法中的视图名格式:视图名
渲染视图时,可指定一个视图名或视图文件路径/别名,大多数情况下使用前者因为前者简洁灵活,
我们称用名字的视图为 视图名.
视图名对应的视图文件路径解析:
视图名可省略文件扩展名,这种情况下使用 .php 作为扩展,视图名 about 对应到 about.php 文件名;
视图名以双斜杠 // 开头,对应的视图文件路径为 @app/views/ViewName,也就是说视图文件在 yii\base\Application::viewPath 路径下找, 例如 //site/about 对应到 @app/views/site/about.php。
视图名以单斜杠/开始,视图文件路径以当前使用模块 的yii\base\Module::viewPath开始,如果不存在模块,使用@app/views/ViewName开始, 例如,如果当前模块为user, /user/create 对应成 @app/modules/user/views/user/create.php,
如果不在模块中,/user/create对应@app/views/user/create.php。
如果 yii\base\View::context 渲染视图 并且上下文实现了 yii\base\ViewContextInterface, 视图文件路径由上下文的 yii\base\ViewContextInterface::getViewPath() 开始, 这种主要用在控制器和小部件中渲染视图,例如 如果上下文为控制器SiteController,site/about 对应到 @app/views/site/about.php。
如果视图渲染另一个视图,包含另一个视图文件的目录以当前视图的文件路径开始, 例如被视图@app/views/post/index.php 渲染的item 对应到 @app/views/post/item。
根据以上规则,在控制器中 app\controllers\PostController 调用 $this->render('view'),
实际上渲染 @app/views/post/view.php视图文件,当在该视图文件中调用 $this->render('_overview') 会渲染 @app/views/post/_overview.php 视图文件。
yii在view文件里,如何使用js或css,meta,link
以下的$this变量是在视图文件中使用的。(以下代码均在视图文件里面实现)
方法如下:
1.css$css = "body{padding:0px;margin:0px;}";
$this->registerCss($css);
$this->registerCssFile('');//参数问css文件路径
2.js$js = "alert('hello world!');";
$this->registerJs($js,\yii\web\View::POS_READY);//第二个参数表示位置
$this->registerJsFile(
'assets/35aad32d/gii.js',
[
'depends'=>['yii\web\JqueryAsset','yii\web\YiiAsset'],
'position'=>\yii\web\View::POS_END
]
);
registerJs()的两个参数,第一个是js字符串 第二个为该js代码所放的位置
第二个参数有如下几种类型:(以下常量均在yii\web\View.php里面)/**
* The location of registered JavaScript code block or files.
* This means the location is in the head section.
*/
const POS_HEAD = 1;//在
标签里面/**
* The location of registered JavaScript code block or files.
* This means the location is at the beginning of the body section.
*/
const POS_BEGIN = 2;//在
标签开头/**
* The location of registered JavaScript code block or files.
* This means the location is at the end of the body section.
*/
const POS_END = 3;//在
标签末尾,但还是在标签里面/**
* The location of registered JavaScript code block.
* This means the JavaScript code block will be enclosed within `jQuery(document).ready()`.
*/
const POS_READY = 4;//加载时包含在jQuery(document).ready()方法里面
/**
* The location of registered JavaScript code block.
* This means the JavaScript code block will be enclosed within `jQuery(window).load()`.
*/
const POS_LOAD = 5;//加载时包含在jQuery(document).load()方法里面
registerJsFile():此方法中的第一个参数指定js文件路径,第二个参数是一个数组,里面包含如下key值:
* - `depends`: 一个数组,制定在该js文件依赖的js,好再加载前先加载依赖项
* - `position`: 制定加载js文件的位置,有三种情况(以下常量均在yii\web\View.php里面)
* const POS_HEAD = 1;//在
标签里面* const POS_BEGIN = 2;//在
标签开头* const POS_END = 3;//在
标签末尾,但还是在标签里面*
3.metaTage.g.
registerMetaTag([
'name' => 'description',
'content' => 'This website is about funny raccoons.'
]);$this->registerMetaTag(['name'=>'csrf-param','content'=>'_csrf']);
4.linkTag// registerLinkTag(['rel' => 'icon', 'type' => 'image/png', 'href' => '/myicon.png']);
$this->registerLinkTag(['rel'=>'archives','title'=>'百度','href'=>'http://www.baidu.com']);
以上方法均有第三个参数$key/*
* @param string $key the key that identifies the JS code block. If null, it will use
* $js as the key. If two JS code blocks are registered with the same key, the latter
* will overwrite the former.
*/
以上是对registerJS()方法而言的,其他方法都类似以上的解释,就说此变量用来确定JS代码块,如果为空,它将使用$Js作为key,如果出现两个代码块的key值相同,那么就会覆盖前面的代码块。