1、yii默认返回的数据结构
在用yii框架进行开发的时候,如果纯做api接口,那么需要 throw new NotFoundHttpException() 时自动返回json格式,那么需要在config下的web.php中做好下的配置
'components' => [
...
'response' => [ 'format' => YII_ENV_DEV ? \yii\web\Response::FORMAT_HTML: \yii\web\Response::FORMAT_JSON ],
...
]
2、yii中配置默认的主页
在yii框架开发中,配置默认的主页,需要在config/web.php中配置一条信息
'defaultRoute' => 'site/index',
3、yii中进行redis配置的时候,注意按下面的配置
'redis' => [ 'class' => 'yii\redis\connection', 'hostname' => '127.0.0.1', //注意:这里不要配置localhost 'port' => 6379, 'database' => 0, ],
如果hostname配置成localhost,那么用调用的时候,速度会比较慢
4、yii中web配置中的user配置
在yii中web配置中user所对应的配置项,相当于yii\web\User这个类里的public公有项,在进行配置的时候,可以参考着配置,比如更改默认的登录地址与过期时间,如下:
'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, 'loginUrl' => ['site/login'] ]
5、yii中contoller类中actions方法的使用
定义一个action类,注意需要继承yii\base\Action这个类
<?php
namespace app\common;
use yii\base\Action;
//我们需要继承yii\base\Action类
class TestAction extends Action {
//这里的参数值是通过控制器actions中配置过来的
public $data;
//实现run方法
public function run() {
echo "这个是传入的参数{$this->data}"
}
}
使用这个方法如下:
<?php
namespace app\controllers;
use YII;
use yii\web\Controller;
class IndexController extends Controller
{
//actions的作用主要是共用功能相同的方法
public function actions()
{
return [
'test' => [
'class' => 'app\common\TestAction',
'data' => 'this is test data'
],
];
}
}
这样我们在地址栏就可以通过/index/test来访问调用了。
6、yii中常用的rules的规则
去除首尾空白字符
['email', 'trim'] 或 ['email', 'filter', 'filter' => 'trim']
字段必填
['email', 'required']
赋予默认值
['age', 'default', 'value' => 20]
字符串长度
['email', 'string', 'min' => 3, 'max' => 20] 或 ['email', 'string', 'length' => [3, 20]]
格式类型验证
['age', 'integer'] // 整数格式
['salary', 'double'] // 浮点数格式
['temperature', 'number'] // 数字格式
['isAdmin', 'boolean'] // 布尔格式
['email', 'email'] // email格式
['birthday', 'date'] // 日期格式
['website', 'url', 'defaultScheme' => 'http'] // URL格式
验证码
['verificationCode', 'captcha']
值在数据表中是唯一的
['email', 'unique', 'targetClass' => 'commonmodelsUsers']
注意:这里的'targetClass' => 'app\models\CommonModelsUsers‘进行指定;
值在数据表中已存在
['email', 'exist', 'targetClass' => 'commonmodelsUser', 'filter' => ['status' => User::STATUS_ACTIVE], 'message' => 'There is no user with such email.']
检查输入的两个值是否一致
['passwordRepeat', 'required'] // 必须要加上这一句 ['passwordRepeat', 'compare', 'compareAttribute' => 'password', 'operator' => '===']
验证密码
['password', 'validatePassword', 'message' => '密码不正确'] //这里的validatePassword是自己在model下的类里定义的方法
注意:这里的validatePassword是不能为Private的,必需是public
数值范围检查
1 ['age', 'compare', 'compareValue' => 30, 'operator' => '>=']
2 ['level', 'in', 'range' => [1, 2, 3]]
使用自定义函数过滤
['email', 'filter', 'filter' => function($value) { // 在此处标准化输入的email return strtolower($value); }]
文件上传
['textFile', 'file', 'extensions' => ['txt', 'rtf', 'doc'], 'maxSize' => 1024 * 1024 * 1024]
图片上传
['avatar', 'image', 'extensions' => ['png', 'jpg'], 'minWidth' => 100, 'maxWidth' => 1000, 'minHeight' => 100, 'maxHeight' => 1000, ]
使用正则表达式
['username', 'match', 'pattern' => '/^[a-z]w*$/i']
提示:打印出Validator::$builtInValidators
可以看到被支持的所有validators
1 Array
2 (
3 [boolean] => yii\validators\BooleanValidator
4 [captcha] => yii\captcha\CaptchaValidator
5 [compare] => yii\validators\CompareValidator
6 [date] => yii\validators\DateValidator
7 [default] => yii\validators\DefaultValueValidator
8 [double] => yii\validators\NumberValidator
9 [each] => yii\validators\EachValidator
10 [email] => yii\validators\EmailValidator
11 [exist] => yii\validators\ExistValidator
12 [file] => yii\validators\FileValidator
13 [filter] => yii\validators\FilterValidator
14 [image] => yii\validators\ImageValidator
15 [in] => yii\validators\RangeValidator
16 [integer] => Array
17 (
18 [class] => yii\validators\NumberValidator
19 [integerOnly] => 1
20 )
21 [match] => yii\validators\RegularExpressionValidator
22 [number] => yii\validators\NumberValidator
23 [required] => yii\validators\RequiredValidator
24 [safe] => yii\validators\SafeValidator
25 [string] => yii\validators\StringValidator
26 [trim] => Array
27 (
28 [class] => yii\validators\FilterValidator
29 [filter] => trim
30 [skipOnArray] => 1
31 )
32 [unique] => yii\validators\UniqueValidator
33 [url] => yii\validators\UrlValidator
34 [ip] => yii\validators\IpValidator
35 )
注意:如果需要看里面的祥细代码,那么可以直接定位到里面的类里,里面的变量就是其属性
使用示例如下:
1 public function rules()
2 {
3 return array(
4 //必须填写
5 array('email, username, password,agree,verifyPassword,verifyCode', 'required'),
6 //检查用户名是否重复
7 array('email','unique','message'=>'用户名已占用'),
8 //用户输入最大的字符限制
9 array('email, username', 'length', 'max'=>64),
10 //限制用户最小长度和最大长度
11 array('username', 'length', 'max'=>7, 'min'=>2, 'tooLong'=>'用户名请输入长度为4-14个字符', 'tooShort'=>'用户名请输入长度为2-7个字'),
12 //限制密码最小长度和最大长度
13 array('password', 'length', 'max'=>22, 'min'=>6, 'tooLong'=>'密码请输入长度为6-22位字符', 'tooShort'=>'密码请输入长度为6-22位字符'),
14 //判断用户输入的是否是邮件
15 array('email','email','message'=>'邮箱格式错误'),
16 //检查用户输入的密码是否是一样的
17 array('verifyPassword', 'compare', 'compareAttribute'=>'password', 'message'=>'请再输入确认密码'),
18 //检查用户是否同意协议条款
19 array('agree', 'required', 'requiredValue'=>true,'message'=>'请确认是否同意隐私权协议条款'),
20 //判断是否是日期格式
21 array('created', 'date', 'format'=>'yyyy/MM/dd/ HH:mm:ss'),
22 //判断是否包含输入的字符
23 array('superuser', 'in', 'range' => array(0, 1)),
24 //正则验证器:
25 array('name','match','pattern'=>'/^[a-z0-9\-_]+$/'),
26 //数字验证器:
27 array('id', 'numerical', 'min'=>1, 'max'=>10, 'integerOnly'=>true),
28 //类型验证 integer,float,string,array,date,time,datetime
29 array('created', 'type', 'datetime'),
30 //文件验证:
31 array('filename', 'file', 'allowEmpty'=>true, 'types'=>'zip, rar, xls, pdf, ppt','tooLarge'=>'图片不要超过800K'),
32 array('url',
33 'file', //定义为file类型
34 'allowEmpty'=>true,
35 'types'=>'jpg,png,gif,doc,docx,pdf,xls,xlsx,zip,rar,ppt,pptx', //上传文件的类型
36 'maxSize'=>1024*1024*10, //上传大小限制,注意不是php.ini中的上传文件大小
37 'tooLarge'=>'文件大于10M,上传失败!请上传小于10M的文件!'
38 ),
39 } );
rules里on的用法:
//如果配置了on的场景,在调用的时候需要声明场景否则会全部验证 [['title', 'content'], 'required', 'on' => ['add']],
//也可以用except来替代on表示除了指定的场不需要验证,其他的都需要验证 //声明场景 $model->setScenario('add'); //or $model->scenario = 'update';
7、在进行文件上传,制作uploadForm的时候,需要注意formname这个字段必需和传上来的name一致,如果没有的话,需要返回空字符串,否则系统无法读取数据
use yii\base\Model;
class UploadForm extends Model
{
public $file;
public function formName()
{
return '';
}
public function rules()
{
return [
['file', 'file', 'mimeTypes' => ['image/*', 'video/*'], 'maxSize' => 100 * 1024 * 1024 * 1024]
];
}
public function upload () {
if($this->validate()) {
// var_dump($this->file);
} else {
var_dump($this->getFirstErrors());
}
}
}