YII基础
一、目录结构
应用中最重要的目录和文件(假设应用根目录是 basic):
basic/ 应用根目录
composer.json Composer 配置文件, 描述包信息
config/ 包含应用配置及其它配置
console.php 控制台应用配置信息
web.php Web 应用配置信息
commands/ 包含控制台命令类
controllers/ 包含控制器类
models/ 包含模型类
runtime/ 包含 Yii 在运行时生成的文件,例如日志和缓存文件
vendor/ 包含已经安装的 Composer 包,包括 Yii 框架自身
views/ 包含视图文件
web/ Web 应用根目录,包含 Web 入口文件
assets/ 包含 Yii 发布的资源文件(javascript 和 css)
index.php 应用入口文件
yii Yii 控制台命令执行脚本
二、CONTROLER获取变量值
1、AJAX返回
2、跳转和重定向
return $this->redirect('http://example.com/new', 301);
3、输入变量
Yii::$app->request->get('classid', 0);
Yii::$app->request->post('classid', 0);
可以通过 yii\web\Request::headers 属性返回的 header collection 获取HTTP头信息。 例如,
// $headers 是一个 yii\web\HeaderCollection 对象
$headers = Yii::$app->request->headers; // 返回 Accept header 值
$accept = $headers->get('Accept');
可以通过 yii\web\Request::userHost 和 yii\web\Request::userIP 分别获取host name和客户机的IP地址
$userHost = Yii::$app->request->userHost;
$userIP = Yii::$app->request->userIP;
4、请求类型
你可以通过 Yii::$app->request->method 表达式来获取当前请求使用的HTTP方法。 这里还提供了一整套布尔属性用于检测当前请求是某种类型。 例如,
$request = Yii::$app->request;
if ($request->isAjax) { /* 该请求是一个 AJAX 请求 */ }
if ($request->isGet) { /* 请求方法是 GET */ }
if ($request->isPost) { /* 请求方法是 POST */ }
if ($request->isPut) { /* 请求方法是 PUT */ }
5、SESSION和COOKIE
Session 数据
$session = Yii::$app->session;
//获取
$language = $session['language'];
//设置
$session['captcha.number'] = 5; //Flash数据是一种特别的 session 数据,它一旦在某个请求中设置后, 只会在下次请求中有效,然后该数据就会自动被删除。 常用于实现只需显示给终端用户一次的信息, 如用户提交一个表单后显示确认信息。 $session = Yii::$app->session; // 请求 #1
// 设置一个名为"postDeleted" flash 信息
$session->setFlash('postDeleted', 'You have successfully deleted your post.'); // 请求 #2
// 显示名为"postDeleted" flash 信息
echo $session->getFlash('postDeleted'); // 请求 #3
// $result 为 false,因为flash信息已被自动删除
$result = $session->hasFlash('postDeleted');
// 请求 #1
// 设置一个名为"postDeleted" flash 信息
$session->setFlash('postDeleted', 'You have successfully deleted your post.'); // 请求 #2
// 显示名为"postDeleted" flash 信息
echo $session->getFlash('postDeleted'); // 请求 #3
// $result 为 false,因为flash信息已被自动删除
$result = $session->hasFlash('postDeleted');
读取 Cookies
// 从 "request" 组件中获取 cookie 集合(yii\web\CookieCollection)
$cookies = Yii::$app->request->cookies; // 获取名为 "language" cookie 的值,如果不存在,返回默认值 "en"
$language = $cookies->getValue('language', 'en');
发送 Cookies
// 从 "response" 组件中获取 cookie 集合(yii\web\CookieCollection)
$cookies = Yii::$app->response->cookies; // 在要发送的响应中添加一个新的 cookie
$cookies->add(new \yii\web\Cookie([
'name' => 'language',
'value' => 'zh-CN',
])); // 删除一个 cookie
$cookies->remove('language');
三、VIEW基本标签
- 表单:
<?= Html::beginForm(['order/update', 'id' => $id], 'post', ['enctype' => 'multipart/form-data']) ?>
<?= Html::endForm() ?>
- 按钮
<?= Html::button('Press me!', ['class' => 'teaser']) ?>
<?= Html::submitButton('Submit', ['class' => 'submit']) ?>
<?= Html::resetButton('Reset', ['class' => 'reset']) ?>
- 输入框
input 相关的方法有两组:以 active 开头的被称为 active inputs, 另一组则不以其开头。active inputs 依据指定的模型和属性获取数据, 而普通 input 则是直接指定数据。一般用法如下:
type, input name, input value, options
<?= Html::input('text', 'username', $user->name, ['class' => $username]) ?> type, model, model attribute name, options
<?= Html::activeInput('text', $user, 'name', ['class' => $username]) ?>
如果你知道 input 类型,更方便的做法是使用以下快捷方法:
yii\helpers\Html::buttonInput()
yii\helpers\Html::submitInput()
yii\helpers\Html::resetInput()
yii\helpers\Html::textInput(), yii\helpers\Html::activeTextInput()
yii\helpers\Html::hiddenInput(), yii\helpers\Html::activeHiddenInput()
yii\helpers\Html::passwordInput() / yii\helpers\Html::activePasswordInput()
yii\helpers\Html::fileInput(), yii\helpers\Html::activeFileInput()
yii\helpers\Html::textarea(), yii\helpers\Html::activeTextarea()
- Radios 和 checkboxes 在方法的声明上有一点点不同:
<?= Html::radio('agree', true, ['label' => 'I agree']);
<?= Html::activeRadio($model, 'agree', ['class' => 'agreement'])
<?= Html::checkbox('agree', true, ['label' => 'I agree']);
<?= Html::activeCheckbox($model, 'agree', ['class' => 'agreement'])
Dropdown list 和 list box 将会如下渲染:
<?= Html::dropDownList('list', $currentUserId, ArrayHelper::map($userModels, 'id', 'name')) ?>
<?= Html::activeDropDownList($users, 'id', ArrayHelper::map($userModels, 'id', 'name')) ?>
<?= Html::listBox('list', $currentUserId, ArrayHelper::map($userModels, 'id', 'name')) ?>
<?= Html::activeListBox($users, 'id', ArrayHelper::map($userModels, 'id', 'name')) ?>
第一个参数是 input 的名称,第二个是当前选中的值,第三个则是一个下标为列表值, 值为列表标签的名值对数组。
如果你需要使用多项选择, checkbox list 应该能够符合你的需求:
<?= Html::checkboxList('roles', [16, 42], ArrayHelper::map($roleModels, 'id', 'name')) ?>
<?= Html::activeCheckboxList($user, 'role', ArrayHelper::map($roleModels, 'id', 'name')) ?>
否则,用 radio list :
<?= Html::radioList('roles', [16, 42], ArrayHelper::map($roleModels, 'id', 'name')) ?>
<?= Html::activeRadioList($user, 'role', ArrayHelper::map($roleModels, 'id', 'name')) ?>
- Labels 和 Errors :
如同 inputs 一样,Yii 也提供了两个方法用于生成表单 label 。 带 ative 方法用于从 model 中取数据,另外一个则是直接接收数据。
<?= Html::label('User name', 'username', ['class' => 'label username']) ?>
<?= Html::activeLabel($user, 'username', ['class' => 'label username'])
为了从一个或者一组 model 中显示表单的概要错误,你可以使用如下方法:
<?= Html::errorSummary($posts, ['class' => 'errors']) ?>
为了显示单个错误:
<?= Html::error($post, 'title', ['class' => 'error']) ?>
- 样式表和脚本:
Yii 提供两个方法用于生成包含内联样式和脚本代码的标签。
<?= Html::style('.danger { color: #f00; }') ?>
Gives you
<style>.danger { color: #f00; }</style>
<?= Html::script('alert("Hello!");', ['defer' => true]);
Gives you
<script defer>alert("Hello!");</script>
如果你想要外联 css 样式文件,可以如下做:
<?= Html::cssFile('@web/css/ie5.css', ['condition' => 'IE 5']) ?>
generates
<!--[if IE 5]>
<link href="http://example.com/css/ie5.css" />
<![endif]-->
第一个参数是 URL。第二个参数是标签属性数组。比普通的标签配置项额外多出的是,你可以指定:
condition来让<link被条件控制注释包裹( IE hacker )。 希望你在未来不再需要条件控制注释。noscript可以被设置为true,这样<link就会被<noscript>包裹,如此那么这段代码只有在浏览器不支持 JavaScript 或者被用户禁用的时候才会被引入进来。
为了外联 JavaScript 文件:
<?= Html::jsFile('@web/js/main.js') ?>
这个方法的第一个参数同 CSS 一样用于指定外联链接。第二个参数是一个标签属性数组。 同 cssFile 一样,你可以指定 condtion 配置项。
- 超链接
有一个方法可以用于便捷的生成超链接:
<?= Html::a('Profile', ['user/view', 'id' => $id], ['class' => 'profile-link']) ?>
第一个参数是超链接的标题。它不会被转码,所以如果是用户输入数据, 你需要使用 Html::encode() 方法进行转码。第二个参数是 <a标签的 href 属性的值。 关于该参数能够接受的更详细的数据值,请参阅 Url::to()。第三个参数是标签的属性数组。
在需要的时候,你可以用如下代码生成 mailto 链接:
<?= Html::mailto('Contact us', 'admin@example.com') ?>
- 图片
为了生成图片标签,你可以如下做:
?= Html::img('@web/images/logo.png', ['alt' => 'My logo']) ?>
generates
<img src="http://example.com/images/logo.png" alt="My logo" />
除了 aliases 之外,第一个参数可以接受 路由,查询,URLs。 同 Url::to() 一样。
- 列表
无序列表可以如下生成:
<?= Html::ul($posts, ['item' => function($item, $index) {
return Html::tag(
'li',
$this->render('post', ['item' => $item]),
['class' => 'post']
);
}]) ?>
有序列表请使用 Html::ol() 方法。
四、MODEL插入、批量插入、修改、删除
五、事务处理
$db = Yii::$app->db;
$transaction = $db->beginTransaction(); try {
$db->createCommand($sql1)->execute();
$db->createCommand($sql2)->execute();
// ... executing other SQL statements ... $transaction->commit(); } catch(\Exception $e) { $transaction->rollBack(); throw $e;
}
六、查询all one scalar
- all():将返回一个由行组成的数组,每一行是一个由名称和值构成的关联数组(译者注:省略键的数组称为索引数组)。
- one():返回结果集的第一行。
- column():返回结果集的第一列。
- scalar():返回结果集的第一行第一列的标量值。
- exists():返回一个表示该查询是否包结果集的值。
- count():返回
COUNT查询的结果。 - 其它集合查询方法:包括 sum($q), average($q), max($q), min($q) 等。
$q是一个必选参数, 既可以是一个字段名称,又可以是一个 DB 表达式。
七、TP find_in_set的使用
八、TP加载第三方插件方式
YII基础的更多相关文章
- yii基础知识-应用
应用是指请求处理中的执行上下文.它的主要任务是分析用户请求并将其分派到合适的控制器中以作进一步处理. 它同时作为服务中心,维护应用级别的配置.鉴于此,应用也叫做前端控制器. 应用由 入口脚本 创建为一 ...
- yii基础应用目录结构
basic/ 应用根目录 composer.json Composer 配置文件, 描述包信息 config/ 包含应用配置及其它配置 console.php 控制台应用配置信息 web.php We ...
- yii 基础版用rbac-plus
1.将高级版的common/models/user.php覆盖掉基础版的models/user.php 2.将命名空间 namespace common\models;改为 namespace app ...
- yii基础知识-
控制器 是 CController 或其子类的实例.它在当用户请求时由应用创建. 当一个控制器运行时,它执行所请求的动作,动作通常会引入所必要的模型并渲染相应的视图. 动作 的最简形式,就是一个名字以 ...
- YII基础二
YII多表关联查询 ->select("{{%relation_detail}}.name") ->from("{{%user}}") ->l ...
- yii基础控制器安全验证
- YII Framework学习教程-YII的Model-开发规范-路径别名-命名空间
到这里,大概的YII开发已经基本可以,但是下面要将的所有课程,学完之后可以让你更爱YII.下面的教程是讲的MVC的M,model.数据,业务,代码的集中地区.所以开始之前,学学开发规范-路径别名-命名 ...
- yii依赖注入和依赖注入容器
依赖注入和依赖注入容器¶ 为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Ser ...
- yii依赖注入
为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Service Locator) ...
随机推荐
- 【牛客】乃爱与城市拥挤程度 — 树形dp,up and down
我太难了 这题做得我要死了,来来回回写了大概八九个小时 错误的原因要么是快速幂写错(一生之敌,要么是忘取模爆\(longlong\)变负数\(QAQ\) \(update\) \(2019.11.13 ...
- wpf 菜单样式和绑定树形数据
前言 在wpf开发中,经常会使用到Menu和ContentMenu.但是原生的样式比较简陋,对于比较追求界面美好的人来说是十分不友好的.那么,这就涉及到对Menu的样式修改了.与此同时,我们还希望Me ...
- 杂谈 | 增量思维v.s.存量思维
无挂碍故,无有恐怖,远离颠倒梦想,究竟涅槃. ——<心经> 声明在前,本文并不是要论述“存量思维”是不好的, 而是整理某些场景下需要摒弃“存量思维”,或者提倡“增量思维”. 1 ...
- 9. selenium+request方式的cookie绕过
1. 首先确认POST请求的content-type类型 2. 查看cookies数据 3. 找到对应的headers数据 4. 如果是application/json,传入的json数据需要时jso ...
- CKafka如何助力腾讯课堂实现百万消息稳定互动?
疫情期间,为了保障国内学子的正常学习进度,腾讯课堂积极响应国家“停工不停学”的号召,紧急上线疫情期间专用的“老师极速版”,使广大师生足不出户,即可快速便捷的完成线上开课.面对线上课堂百万量级的互动消息 ...
- Burpsuite被动扫描流量转发插件:Passive Scan Client
编译成品:链接: https://pan.baidu.com/s/1E0vsPGgPgB9bXCW-8Yl1gw 提取码: 49eq Passive Scan Client Burpsuite被动扫描 ...
- 微信开发+百度AI学习:微信网页开发环境搭建
参考微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 两步即可获取微信网页开发能力 STEP1: ...
- hdu6026 dijkstra
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/6026/ 题意大致是:给定一个图,要求删边使他变成树,使得每个点到0的距离就是原图中0到这个点的最短路径.其实就是 ...
- 热点 | 四月最佳Github项目库与最有趣Reddit热点讨论
来源:Analytics Vidhya 编译:磐石 [磐创AI导读]:Github是全球最大的开源代码社区,Reddit是最受大家欢迎的热点讨论交流平台.接下来磐创AI将为大家带来四月份Github最 ...
- Thread -- Volatile
1,可见性也就是说一旦某个线程修改了该被volatile修饰的变量,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,可以立即获取修改之后的值. 在Java中为了加快程序的运行效率,对一些变 ...