Yii2 学习内容整理

PHPer 2018-01-16 2300 0 0

Yii2片段缓存详解yii2常用表单处理方法php yii2 出现mysql-gone-away-2006解决Yii2 数据操作DAO【翻译】 MySQL中yii2使用原生sql CURD...

3ec8b983d8-yiiframework-qq-jie-tu20180125024120.jpg

Yii2片段缓存详解

yii2常用表单处理方法

php yii2 出现mysql-gone-away-2006解决

Yii2 数据操作DAO

【翻译】 MySQL中yii2使用原生sql CURD


Yii2 获取来路代码 20220409...

立即注册

更新于:2022-04-09 17:36:03
    您需要登录后才可以评论。 立即注册

    Yii2的Cookie操作在代码测试中遇到的问题(Cookie常见问题以及注意事项)

    \Yii::$app->response->cookies->remove($cookieName);为何删除不了cookie,这里把我遇到的一种情况说明下,我遇到的问题已被我发现并解决。另外还可以直接用php自带的函数操作cookie,setcookie($cookieName, "" , time()-1);//删除cookie

    |||20220415 已发在知乎 https://zhuanlan.zhihu.com/p/499165410

    为了方便理解Yii2的cookie这里写了个测试代码

    <?php
    namespace frontend\controllers;
    /**
     * Test2 Controller
     */
    class Test2Controller extends \yii\web\Controller
    {
    	public function actionIndex(){
            $cookies = \Yii::$app->request->cookies;//获取cookie
            $cookieName='cookieTest';
            if ($cookies->has($cookieName)) {
                //移除名为cookieTest的cookie
                \Yii::$app->response->cookies->remove($cookieName);
                echo $cookieName.' deleted';
            }else{
                //没有名为cookieTest的cookie,创建该cookie
                \Yii::$app->response->cookies->add(new \yii\web\Cookie([
                    'name' => $cookieName,
                    'value' => 'aa',
                    'expire' => time() + 3600,//3600秒后cookie过期
                ]));
                echo $cookieName.' added';
            }//if else结束
    	}
    }
    

    反复执行该代码会来回输出:cookieTest added 和cookieTest deleted ...

    立即注册
    更新于:2022-04-15 21:55:15

    Yii2多表联结子查询的应用

    20220415 已发在知乎 https://zhuanlan.zhihu.com/p/499373154

    //查询mark表里用户收藏的帖子id

    $query = Post::find()->with(['mark', function($query) {$query-> where('{{%mark}}.user_id='.$user_id)->andwhere('{{%mark}}.action=2')->andwhere('{{%mark}}.type=2')->andwhere('{{%mark}}.status=1')->asArray();}]);

    //按上面的语句报错,对SQL语句的with不清楚,就在Yii里试着用,坑了自己 ,Yii报错...

    立即注册
    更新于:2022-04-15 21:53:51

    Yii2 获取模块名、控制器名、方法名

    Yii2 获取模块名、控制器名、方法名

    在视图中:

    模块名 $this->context->module->id

    控制器名 $this->context->id

    方法名 $this->context->action->id

    在控制器或模型中

    模块名 Yii::$app->controller->module->id;

    控制器名 Yii::$app->controller->id

    方法名 Yii::$app->controller->action->id;

    或控制器中

    模块名 $this->module->id;...

    立即注册
    更新于:2022-04-13 06:11:42

    Yii2 学习内容整理-视图View

    Yii2 学习内容整理-视图View 20220417...

    立即注册
    更新于:2022-04-17 18:50:51

    php yii2 出现mysql-gone-away-2006解决

    20220415 已发在知乎 https://zhuanlan.zhihu.com/p/499379606

    mysql gone away 简单的说就是连接不见了,那为啥不见了?

    这个我会在最后说。

    以下是网上的文章,觉得有些旁敲侧击了。


    http://blog.csdn.net/u012260707/article/details/78223008

    问题描述:

    Error Info:
    Array
    (
    [0] => HY000
    [1] => 2006
    [2] => MySQL server has gone away
    )
    

    "用php跑数据 任务时间过长,每次都会出现这个,能帮忙把这个超时时间设置到最大吗,下周我们仔细看看这个是啥问题,之前用JDBC跑数 不会出现这个问题,应该是php,yii2一直拿connection没有释放"

    JDBC中!=null 就close 这种事我觉得应该是框架做的

    上述可知用JDBC无此问题,用yii2频繁出现,定位是yii2的问题,gone-away意思是连接不见了,断掉了,那么有没有colse和open的方法呢,断掉了我们手动去open一下

    查了一下open和close的写法为

    Yii::$app->db->open();
    Yii::$app->db->close();
    

    思路是在

    try{
    //code
    }catch(Exception $e){
    //去判断 $e是不是2006,然后去open一下,然后再colse一下
    }
    
    每个方法都去写一个这样的try{}catch{}不是很科学,通常的做法是在顶级父类的afterAction或入口去拦截这样的错误
    最终选取的做法,重载yii\db\Command的execute和queryInternal方法
    阅读yii\db\Command源码可知
    execute()--->所有的增删改操作的入口
    queryInternal()---->所以的查询操作的入口
    最终书写一个Command去继承yii\db\Command,然后在数据库db配置中把默认的command Class 改成我们自己写的子类commandscm
    

    修改示例 ...

    立即注册
    更新于:2022-05-29 10:27:30

    学习yii2.0 数据缓存、片段缓存、页面缓存、http缓存(Yii2数据缓存之增删改查)

    详情去原文网址那里看下 20220413


    缓存 API(真正的重点,理解方法的含义是关键20200403)

    所有缓存组件都有同样的基类yii\caching\Cache,因此都支持如下 API:

      • get():通过一个指定的键(key)从缓存中取回一项数据。 如果该项数据不存在于缓存中或者已经过期/失效,则返回值 false。
      • set():将一个由键指定的数据项存放到缓存中。
      • add():如果缓存中未找到该键,则将指定数据存放到缓存中。
      • getOrSet():返回由键指定的缓存项,或者执行回调函数,把函数的返回值用键来关联存储到缓存中, 最后返回这个函数的返回值。
      • multiGet():由指定的键获取多个缓存数据项。
      • multiSet():一次存储多个数据项到缓存中,每个数据都由一个键来指明。
      • multiAdd():一次存储多个数据项到缓存中,每个数据都由一个键来指明。 如果某个键已经存在,则略过该数据项不缓存。
      • exists():返回一个值,指明某个键是否存在于缓存中。
      • delete():通过一个键,删除缓存中对应的值。
      • flush():删除缓存中的所有数据。

    配置缓存

      yii框架的配置文件config/web.php中,在$config数组中的component中,有一项就是cache。yii框架默认提供的是文件缓存,如下: ...

    立即注册
    更新于:2022-04-14 01:12:55

    Yii2片段缓存详解

    http://blog.csdn.net/u010010725/article/details/52...概述这里只是简单讲一下用法,如果想更详细的了解,去看 官方手册 比较好。片段缓存指的是缓存页面内容中的某个片段。...


    概述

    这里只是简单讲一下用法,如果想更详细的了解,去看 官方手册 比较好。

    片段缓存指的是缓存页面内容中的某个片段。例如,一个页面显示了逐年销售额的摘要表格, 可以把表格缓存下来,以消除每次请求都要重新生成表格 的耗时。片段缓存是基于数据缓存实现的。

    基本用法

    片段缓存主要在view中使用

    // ..../view/site/index.php页面
    <?php 
    if($this->beginCache('cache')) {
        echo "<p class='cache'>这里待会会被缓存</p>";
        $this->endCache();
    }
    echo "<p class='no_cache'>这里不会被缓存</p>";
    ?>

    和数据缓存一样,每个片段缓存都需要一个唯一的名称。

    过期时间

    // ..../view/site/index.php页面
    <?php 
    $duration = 15; // 设置过期秒数
    if($this->beginCache('cache' , ['duration' => $duration])) {
        echo "<p class='cache'>这里待会会被缓存</p>";
        $this->endCache();
    }
    echo "<p class='no_cache'>这里不会被缓存</p>";
    ?>

    依赖关系

    和数据缓存一样,片段缓存的内容一样可以设置缓存依赖。例如 一段被缓存的文章,是否重新缓存取决于它是否被修改过。不过具体写法上略有不用。

    // ..../view/site/index.php页面
    <?php 
    $dependency = [ // 这里用文件依赖举例
        'class' => '\yii\caching\FileDependency',
        'fileName' => 'robots.txt'
    ];
    if($this->beginCache('cache' , ['dependency' => $dependency])) {
        echo "<p class='cache'>这里待会会被缓存</p>";
        $this->endCache();
    }
    echo "<p class='no_cache'>这里不会被缓存</p>";
    ?>

    当对应依赖文件被修改时,缓存也被取消。 ...

    立即注册
    更新于:2022-04-15 21:42:28

    yii2常用表单处理方法

    创建一个表单须加载 ‘yii\widgets\ActiveForm’ 和 ‘yii\helpers\Html’

    ActiveForm::begin() - creates a form instance and  beginning of the form.
    ActiveForm::begin() and ActiveForm::end() - All of the content placed between this.
    

    使用别名空间 namespace 用 ActiveForm

    <?php
    use yii\helpers\Html;
    use yii\widgets\ActiveForm;
    ?>
    

    “的ActiveForm'命名空间是非常重要的创造一个积极的形式和”HTML“命名空间是显示不同的HTML输入字段非常有用。

    Active Form Begin And End

    <?php
    use yii\helpers\Html;
    use yii\widgets\ActiveForm;
    
    //$form = ActiveForm::begin(); //Default Active Form begin
    $form = ActiveForm::begin([
        'id' => 'active-form',
        'options' => [
    				'class' => 'form-horizontal',
    				'enctype' => 'multipart/form-data'
    				],
    ])
    /* ADD FORM FIELDS */
    ActiveForm::end();
    ?>
    

    表单上传的方法

    使用输入文本框

    //Format 1
    <?= $form->field($model,'name'); ?>
    //Format 2
    <?= $form->field($model, 'name')->textInput()->hint('Please enter your name')->label('Name') ?>
    

    TextArea 文本域

    <?= $form->field($model, 'desc')->textarea(); ?>
    <?= $form->field($model, 'desc')->textarea()->label('Description'); ?>
    <?= $form->field($model, 'desc')->textarea(array('rows'=>2,'cols'=>5)); ?>
    

    Password Input Field

    //Format 1
    <?= $form->field($model, 'password')->input('password') ?>
    //Format 2
    <?= $form->field($model, 'password')->passwordInput() ?>
    //Format 3
    <?= $form->field($model, 'password')->passwordInput()->hint('Password should be within A-Za-z0-9')->label('Password Hint') ?>
    

    We added different type of password input field like password with hint, custom lable....

    立即注册
    更新于:2022-04-15 21:36:40

    Yii2 数据操作DAO

    执行 SQL 语句
    $db = \Yii::$app->db;
    $rows = $db->createCommand('SELECT * FROM zs_dynasty')
    ->queryAll();


    $rowCount=$command->execute(); // 执行无查询 SQL
    $dataReader=$command->query(); // 执行一个 SQL 查询
    $rows=$command->queryAll(); // 查询并返回结果中的所有行
    $row=$command->queryRow(); // 查询并返回结果中的第一行
    $column=$command->queryColumn(); // 查询并返回结果中的第一列
    $value=$command->queryScalar(); // 查询并返回结果中第一行的第一个字段


    获取查询结果
    $db = \Yii::$app->db;
    $query = $db->createCommand('SELECT * FROM zs_dynasty')
    ->query();
    while(($row=$query->read())!==false) {
    print_r($row);
    }
    // 使用 foreach 遍历数据中的每一行
    $query = $db->createCommand('SELECT * FROM zs_dynasty')
    ->query();
    foreach($query as $row) {
    print_r($row);
    }
    // 一次性提取所有行到一个数组
    $query = $db->createCommand('SELECT * FROM zs_dynasty')
    ->query();
    $rows=$query->readAll();
    print_r($rows);




    使用事务
    $db = \Yii::$app->db;
    $transaction=$db->beginTransaction();
    try
    {
    $query = $db->createCommand('SELECT * FROM zs_dynasty')
    ->query();
    $transaction->commit();
    }
    catch(Exception $e) // 如果有一条查询失败,则会抛出异常
    {
    $transaction->rollBack();
    }
    $rows=$query->readAll();
    print_r($rows);


    绑定参数
    // 一条带有两个占位符 ":username" 和 ":email"的 SQL
    $sql="INSERT INTO tbl_user (username, email) VALUES(:username,:email)";
    $db = \Yii::$app->db;
    $command=$db->createCommand($sql);
    // 用实际的用户名替换占位符 ":username"
    $command->bindParam(":username",$username,PDO::PARAM_STR);
    // 用实际的 Email 替换占位符 ":email"
    $command->bindParam(":email",$email,PDO::PARAM_STR);
    $command->execute();
    // 使用新的参数集插入另一行
    $command->bindParam(":username",$username2,PDO::PARAM_STR);
    $command->bindParam(":email",$email2,PDO::PARAM_STR);
    $command->execute();


    绑定列
    $sql="SELECT username, email FROM tbl_user";
    $dataReader=$db->createCommand($sql)->query();
    // 使用 $username 变量绑定第一列 (username)
    $dataReader->bindColumn(1,$username);
    // 使用 $email 变量绑定第二列 (email)
    $dataReader->bindColumn(2,$email);
    while($dataReader->read()!==false)
    {
    // $username 和 $email 含有当前行中的 username 和 email
    }


    使用表前缀
    配置:Connection::tablePrefix
    在 SQL 语句中使用 {{%TableName}}
    $sql='SELECT * FROM {{user}}';
    $users=$connection->createCommand($sql)->queryAll();

    ...

    立即注册
    更新于:2022-04-15 21:40:09

    【翻译】 MySQL中yii2使用原生sql CURD

    更多yii2使用技巧请参考:http://nai8.me/tool-sc.html批量插入数据:[php] view plain copyYii::$app-&gt;db-&gt;createCommand()-&gt;batchInsert('user', ['email', 'pass...

    更多yii2使用技巧请参考:http://nai8.me/tool-sc.html

    批量插入数据:

    [php] view plain copy

    1. Yii::$app->db->createCommand()->batchInsert('user', ['email', 'password', 'first_name'],
    2. [
    3. ['james.franklin@example.com', 'changeme7', 'James'],
    4. ['linda.marks@example.com', 'changeme7', 'Linda']
    5. ['roger.martin@example.com', 'changeme7']
    6. ])->execute();

    更新数据:

    [php] view plain copy...

    立即注册
    更新于:2018-01-17 02:17:15

    一篇为你讲透Yii2的widget

    yii开发中,用到了大量的widget,我们也能自己建立一个widget,今天为你讲解widget的运行机理,让你游刃有余的操作它。

    ActiveForm、Breadcrumbs、DetailView、LinkPager、ListView 等等,这些内置的挂件让我们开发变的如此简单。

    yii开发中,用到了大量的widget,我们也能自己建立一个widget,今天为你讲解widget的运行机理,让你游刃有余的操作它。

    ActiveForm、Breadcrumbs、DetailView、LinkPager、ListView 等等,这些内置的挂件让我们开发变的如此简单。

    本节教你自定义一个widget,顺便说下widget的运行机理和几大重要函数。

    老规矩,先说目录。

    • 什么时候用widget
    • 新建一个widget
    • begin & end 方法
    • beforeRun & afterRun 方法

    begin...

    什么时候用widget

    场景还是蛮简单的、当我们发现页面有的区块重复出现了,比如TOP10、比如内容编辑器等、就要考虑是否要做成一个widget了。

    新建一个widget

    我们还是举例把,新建一个Top10的区块。首先我们要在应用程序的components下新建一个Top10Widget的类,根据psr-4规则,布局应该是这样的

    • components
    • components\Top10Widget.php

    Top10Widget.php的内容

    namespace app\components;
    use yii\base\Widget;
    class Top10Widget extends Widget {
    	public $catId;
    	public function init(){
    		parent::init();
    		if(empty($this->catId)){
    			$this->catId = 0;
    		}
    	}
    	public function run(){		
    		parent::run();
    	}
    }
    
    

    作为一个widget,你必须要继承于yii\base\Widget才可以,就像我们的Top10Widget一样。类的变量代表将来视图使用该挂件时对其传递的参数,除此之外我们要重载Widget的init和run两个方法。

    要注意的一点是,在方法里需要先调用父类的对应方法,如上面代码一样,这个要记住。

    init() 方法旨在对传递过来的变量进行验证、筛选及处理,所以对于init而言,如果参数出现异常代表前台并没有传递参数正确,这个时候你可以使用throw new Exception("xxx");来抛出异常,页面会报错,当然为了美观,我们可以使用try ... catch....将这个异常接住然后更友好的显示。

    小提示:对于throw异常的方法,在run中也一样,我建议try .... catch ....它们。

    好的,上面说了init的初衷,接下来说下run函数(有些挂件并没有使用init,而是将所有数据都放到run里处理也是可以的,不过我一般不这么干)。

    run() 方法代表该关键的执行逻辑,针对于init处理过的变量,进行逻辑处理,最后显示给客户想要的东西。就和action一样,这里面可以执行很多很多。

    最后我们可以通过return 或 echo 将结果返回给浏览器

    namespace app\components;
    use yii\base\Widget;
    class Top10Widget extends Widget {
    	public $catId;
    	// 省略的代码....
    	public function run(){		
    		parent::run();
    		return $this->catId; // 不完全等价于 echo $this>-catId
    	}
    }
    
    

    那么一个问题出现了,如果我仅仅是想像是一些数字结果,而是希望它的样子更丰富,我要如何做那?
    我想你也想到了,我们可以对这个挂件加载一个视图,然后在视图里处理。

    namespace app\components;
    use yii\base\Widget;
    class Top10Widget extends Widget {
    	public $catId;
    	// 省略的代码....
    	public function run(){		
    		parent::run();
    		return $this->render('top10',[
    			'catId'=>$this->catId
    		]);
    	}
    }
    
    

    top10.php文件在哪建立?按照约定,我们需要在app\components\views下建立这个视图。

    use app\components\Top10Widget;
    <?= Top10Widget::widget(['catId'=>98]);?>
    
    

    看到了吧,和控制的视图一样,先use,在使用。 ...

    立即注册
    更新于:2022-07-15 11:49:44

    Yii2模块学习

    讲到模块的控制台命令时,听不明白。 "想要在命令行中查看你的命令 ” 是什么意思?模块中的控制台命令您的模块也可以声明命令,这将通过 控制台 模式可用。当 Yii 在控制台模式下执行并将其指向命令的命名空间时。想要在...

    讲到模块的控制台命令时,听不明白。 "想要在命令行中查看你的命令 是什么意思?

    模块中的控制台命令

    您的模块也可以声明命令,这将通过 控制台 模式可用。

    当 Yii 在控制台模式下执行并将其指向命令的命名空间时。想要在命令行中查看你的命令, 你需要更改 yii\base\Module::$controllerNamespace 属性。

    一种实现方法是在模块的 init() 方法中测试Yii应用程序的实例类型:

    public function init()
    {
        parent::init();
        if (Yii::$app instanceof \yii\console\Application) {
            $this->controllerNamespace = 'app\modules\forum\commands';
        }
    }
    

    然后您的命令将从命令行使用以下路由:

    yii <module_id>/<command>/<sub_command>


    模块

    http://www.yiichina.com/doc/guide/2.0/structure-modules#using-modules

    模块是独立的软件单元,由模型, 视图, 控制器和其他支持组件组成, 终端用户可以访问在应用主体中已安装的模块的控制器, 模块被当成小应用主体来看待,和应用主体不同的是, 模块不能单独部署,必须属于某个应用主体。

    创建模块

    模块被组织成一个称为yii\base\Module::basePath的目录, 在该目录中有子目录如controllers, models, views 分别为对应控制器,模型,视图和其他代码,和应用非常类似。 如下例子显示一个模型的目录结构:

    forum/
        Module.php                   模块类文件
        controllers/                 包含控制器类文件
            DefaultController.php    default 控制器类文件
        models/                      包含模型类文件
        views/                       包含控制器视图文件和布局文件
            layouts/                 包含布局文件
            default/                 包含DefaultController控制器视图文件
                index.php            index视图文件
    

    模块类

    每个模块都有一个继承yii\base\Module的模块类, 该类文件直接放在模块的yii\base\Module::basePath目录下, 并且能被 自动加载。当一个模块被访问, 和 应用主体实例 类似会创建该模块类唯一实例,模块实例用来帮模块内代码共享数据和组件。

    以下示例一个模块类大致定义:

    namespace app\modules\forum;
    
    class Module extends \yii\base\Module
    {
        public function init()
        {
            parent::init();
    
            $this->params['foo'] = 'bar';
            // ...  其他初始化代码 ...
        }
    }
    

    如果 init() 方法包含很多初始化模块属性代码, 可将他们保存在配置 并在init()中使用以下代码加载:...

    立即注册
    更新于:2018-01-24 01:14:36

    Yii2提交表单提示无法验证

    yii2使用gii生成的搜索视图里的表单使用的是get方式,我改为post就提示无法验证,以为是控制器默认访问是get,实际默认是get和post都可以1234567891011public functi...

    yii2使用gii生成的搜索视图里的表单使用的是get方式,我改为post就提示无法验证,以为是控制器默认访问是get,实际默认是get和post都可以

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public function behaviors()
    {
    return [
    'verbs' => [
    'class' => VerbFilter::className(),
    'actions' => [
    'delete' => ['post'],
    ],
    ],
    ];
    }

    之所以提示无法验证是因为对于post请求,是有一个CSRF验证的

    解决POST数据时因启用Csrf出现的400错误

    第一种解决办法是关闭Csrf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function init()
    {
    $this->enableCsrfValidation = false;
    }
    //或者
    public function __construct($id, $module, $config = [])
    {
    $this->menuActive = 2;
    $this->enableCsrfValidation = false;
    parent::__construct($id, $module, $config);
    }
    //总之把enableCsrfValidation设为false就可以了

      第二种解决办法是在form表单中加入隐藏域...

    立即注册
    更新于:2018-02-04 00:23:03

    解决Yii2 在线上服务器无法访问GII 和BUG工具栏问题

    应用场景把代码转移到线上服务器时,GII、BUG工具不正常使用,但在本地服务器是正常的。分析原因Yii框架在使用GII 和BUG 时,会针对访问IP地址拦截,没有在配置中设置的IP地址...

    应用场景

    把代码转移到线上服务器时,GII、BUG工具不正常使用,但在本地服务器是正常的。

    分析原因

    Yii框架在使用GII 和BUG 时,会针对访问IP地址拦截,没有在配置中设置的IP地址是会默认被拦截掉。

    解决方案

    在common/config/main.php 配置一下参数,访问IP地址,可以百度搜索IP 这样可以看到自己当前的IP地址,这个IP地址是网络运营商自动分配的,与网络运营商断连接后有可能更变。

    return[
    
        'modules'=>[
    
            'gii' => [
                'class' => 'yii\gii\Module',
                // 配置访问IP地址
                'allowedIPs' => ['127.0.0.1', '::1', '116.21.160.23'] 
            ], 
            'debug' => [
                'class' => 'yii\debug\Module',
                 // 配置访问IP地址
                'allowedIPs' => ['127.0.0.1', '::1', '116.21.163.16']
            ],
        ]
    ]

    2016年07月06日发布
    ...

    立即注册
    更新于:2018-02-04 00:27:27

    Yii2 Model的一些常用验证rules规则

    提示:打印出Validator::$builtInValidators可以看到被支持的所有validators去除首尾空白字符['email', 'trim'] 或 ['email', 'filter', 'filter' =&gt; 'trim']字段必填['email', 'required']赋予默认值['age', 'default', 'value' =&gt; 18]字符串长度['email', 'string', 'min' =&gt; 3, 'max' =&gt; 20] 或 ['email', 'string', 'length' =&gt; [3, 20]]格式类型验证// 整数格式 ['age', 'integer'] // 浮点数格式 ['salary', 'double'] // 数字格式 ['tempera

    提示:打印出Validator::$builtInValidators可以看到被支持的所有validators

    去除首尾空白字符

    ['email', 'trim']
    或
    ['email', 'filter', 'filter' => 'trim']

    字段必填

    ['email', 'required']

    赋予默认值

    ['age', 'default', 'value' => 18]

    字符串长度

    ['email', 'string', 'min' => 3, 'max' => 20]
    或
    ['email', 'string', 'length' => [3, 20]]

    格式类型验证

    // 整数格式
    ['age', 'integer']
    // 浮点数格式
    ['salary', 'double']
    // 数字格式
    ['temperature', 'number']
    // 布尔格式
    ['isAdmin', 'boolean']
    // email格式
    ['email', 'email']
    // 日期格式
    ['birthday', 'date']
    // URL格式
    ['website', 'url', 'defaultScheme' => 'http']

    验证码

    ['verificationCode', 'captcha']

    值在数据表中是唯一的

    ['email', 'unique', 'targetClass' => '\common\models\Users']

    值在数据表中已存在

    ['email', 'exist',
        'targetClass' => '\common\models\User',
        'filter' => ['status' => User::STATUS_ACTIVE],
        'message' => 'There is no user with such email.'],

    检查输入的两个值是否一致

    ['passwordRepeat', 'required'] // 必须要加上这一句
    ['passwordRepeat', 'compare', 'compareAttribute' => 'password', 'operator' => '===']

    数值范围检查

    ['age', 'compare', 'compareValue' => 30, 'operator' => '>=']
    ['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']

    更多信息请访问官方中文手册:http://www.yiichina.com/doc/guide/2.0/tutorial-core-validators...

    立即注册
    更新于:2018-02-04 04:25:34

    关于Yii2控制器的layout属性

    看了源代码,在yii\base\Controller里定义的,默认是没有赋值的,所以你要是在控制器里的最开始var_dump($this-&gt;layout);die;输出的应该是NULL,因为之前取消布局...

    看了源代码,在yii\base\Controller里定义的,默认是没有赋值的,所以你要是在控制器里的最开始...

    立即注册
    更新于:2018-02-04 21:59:35

    yii2如何开启debug并在底部显示工具栏(Yii2基础版basic和Yii2高级版advanced)

    //增加用来线上显示工具栏 20180203

    'modules' => [

    'debug' => [

    'class' => 'yii\debug\Module',

    // 配置访问IP地址 183.30.221.127

    'allowedIPs' => ['127.0.0.1', '::1', '183.30.220.106'],

    ],

    ],

    在配置文件里的模块里这样配置加加入自己的ip,就可以显示debug工具栏

    web/index.php代码不用管。

    开启debug

    1、 在web/index.php文件中添加下面两行代码:

    defined('YII_DEBUG') or define('YII_DEBUG', true);
    defined('YII_ENV') or define('YII_ENV', 'dev');
    

    2、在Yii2基础版(yii2-app-basic)中

    打开yii config目录下的web.php文件,找到如下配置

    if (YII_ENV_DEV) {   
        // configuration adjustments for 'dev' environment
        $config['bootstrap'][] = 'debug';
        $config['modules']['debug'] = [        'class' => 'yii\debug\Module',
        // uncomment the following to add your IP if you are not connecting from localhost.
            'allowedIPs' => ['127.0.0.1', '我的IP'],  
        ];
        $config['bootstrap'][] = 'gii';
        $config['modules']['gii'] = [        
        'class' => 'yii\gii\Module',        
        // uncomment the following to add your IP if you are not connecting from localhost.
            'allowedIPs' => ['127.0.0.1', '我的IP'],
        ];
    }
    

    把自己的IP添加进去即可开启debug。

    如果只改web/index.php里的YII_DEBUG的设置,没有在配置文件web.php里把自己的IP添加到allowedIPs里则无法开启debug,如果把'allowedIPs' => ['127.0.0.1', '我的IP'],直接注释掉,则没有IP限制,debug也就开启了。


    在Yii2 高级版(yii2-app-advacned)中,找到common/main.php,在modules的debug里配置,把自己的IP添加进去即可。

    return [
        'name' => '测试',
        'language' => 'zh-CN',
        'timeZone' => 'Asia/Shanghai',
        'aliases' => [
            '@bower' => '@vendor/bower-asset',
            '@npm'   => '@vendor/npm-asset',
        ],
        'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
        'components' => [
            'cache' => [
                'class' => 'yii\caching\FileCache',
            ],
            'log' => [
                'traceLevel' => YII_DEBUG ? 3 : 0,
                'targets' => [
                    [
                        'class' => 'yii\log\FileTarget',
                        'levels' => ['error', 'warning'],
                    ],
                ],
            ],
        ],
        'modules' => [
            //增加用来显示工具栏  ,加入访问的ip地址
            'debug' => [
                'class' => 'yii\debug\Module',
                 // 配置访问IP地址 
                'allowedIPs' => ['127.0.0.1', '::1','113.83.***.***'],
            ],
        ],
    ];
    

    这时运行页面如果报错就会显示具体的错误信息。 ...

    立即注册
    更新于:2023-02-04 19:26:00

    使用Yii2发送邮件

    现在用的邮件端口是465。网上的办法25端口被禁了,前几年还行的。使用Yii2发送邮件config/web.php中开启邮箱配置'mailer' =&gt; [ 'class' =&gt; 'yii\swiftmailer\Mailer', // send all mail...

    网上的办法现在不知道为啥不行了,前几年还行的。

    后来知道是25端口被禁了,202003


    使用Yii2发送邮件config/web.php中开启邮箱配置'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => false,//true表示只生成文件不发 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.qq.com', //每种邮箱的host配置不一样 'username' => 'xxxxx@qq.com',//改成自己的邮箱 'password' => 'xxxxxxxx',//改成自己的邮箱token 'port' => '465', 'encryption' => 'ssl', ], 'messageConfig'=>[ 'charset'=>'UTF-8', 'from'=>['xxxxx@qq.com'=>'YiiAdmin']//邮件显示名称 ],],12345678910111213141516171819SiteController.php控制器文件添加public function actionSendMail(){ $mail= Yii::$app->mailer->compose('reset-password',['token'=>'xxxxxx']); // 渲染一个视图作为邮件模板 文件路径mail/reset-password.php,注意,不在view中 $mail->setTo('xxxxx@hotmail.com');//要发送到的邮箱地址 $mail->setSubject("邮件测试【重置密码】");//邮件标题 if($mail->send()) echo "success"; else echo "failse"; die();}1234567891011视图文件视图文件的输出就是邮件的内容<?php$resetLink = Yii::$app->urlManager->createAbsoluteUrl(['site/reset-password', 'token' => $token]);?><div> <h5>密码重置服务</h5> <a href="<?=$resetLink?>">点击重置密码</a></div>1234567访问 127.0.0.1/base/web/index.php?r=site/send-ma...出现 success则发送成功,若未收到确认邮箱已开启pop3服务————————————————版权声明:本文为CSDN博主「maolidi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/maolidi/article/details/1024... ...

    立即注册
    更新于:2022-04-13 06:09:46

    收发邮件(Mailing) | Yii 2.0 权威指南

    2020年的内容,不知道还能不能作为参考 20220415。

    https://www.yiiframework.com/doc/guide/2.0/zh-cn/tutorial-mailing

    https://www.yiiframework.com/doc/guide/2.0/zh-cn/tutorial-mailing

    https://github.com/yiisoft/yii2-swiftmailer

    建议安装时到项目根目录运行

    php composer.phar require --prefer-dist yiisoft/yii2-swiftmailer

    这样就不存在版本问题,会自动根据你系统环境安装相应的 20200406


    [root@izj6c76p38xsj1pdgufa46z ~]# cd /var/www/html/wokan

    [root@izj6c76p38xsj1pdgufa46z wokan]# php composer.phar require --prefer-dist yiisoft/yii2-swiftmailer ...

    立即注册
    更新于:2022-04-15 22:09:45

    Yii2中各种文本框的使用 [ 2.0 版本 ]

    https://www.yiichina.com/tutorial/7812016-05-25 13:16:46文本框:textInput();密码框:passwordInput();单选框:radio(),radioList();复选框:checkbox(),checkboxList();下拉框:dropDownList();隐藏域:hiddenInput();文本域:textarea(['rows'=>3]);文件上传:fileInput();提交按钮:submitButton();重置按钮:resetButtun();<?php $form = ActiveForm::begin(['action' => ['test/getpost'],'method'=>'post',]); ?> <? echo $form->field($model, 'username')->textInput(['maxlength' => 20]) ?> <? echo $form->field($model, 'password')->passwordInput(['maxlength' => 20]) ?> <? echo $form->field($model, 'sex')->radioList(['1'=>'男','0'=>'女']) ?> <? echo $form->field($model, 'edu')->dropDownLis
    立即注册
    更新于:2020-05-04 17:57:49

    Yii Model中rules验证 获取错误信息

    $model->getErrors();//获取所有验证字段的错误信息 。在表单提交时可以用来调试代码用 20201003

    在model中定义 public function rules(){ return array( array('Name,Email','required'), array('Email','unique','message'=>'{value}出错啦'),//{value}为添加的数据 ); } controller中使用 $model = new myModel();//实例化相关表的模型类 $model->attribute
    立即注册
    更新于:2020-10-03 18:05:13

    Yii2之gii的配置与使用

    在common/config/main.php 配置一下参数,访问IP地址,可以百度搜索IP 这样可以看到自己当前的IP地址,这个IP地址是网络运营商自动分配的,与网络运营商断连接后有可能更变。

    在main.phppcommon/config/main.php配置文件里,找到modules 模块那里增加对应代码 ...

    立即注册
    更新于:2020-11-29 14:24:57

    yii2面包屑Breadcrumbs的使用

    yii2中面包屑Breadcrumbs是yii2自带的小部件,类似本网站的导航栏应该就是采用面包屑来完成的

    例子如下,需要引入 yii\widgets\Breadcrumbs

    8549dd3acf_normal.png

    <?php
    useyii\widgets\Breadcrumbs;
    echoBreadcrumbs::widget([
    'homeLink'=>['label'=>'首页','url'=>['site/index']],
    'itemTemplate'=>"<li>{link}</li>\n",//全局模板运用到每个link
    'links'=>[
    [
    'label'=>'文章列表',
    'url'=>['site/index'],
    'template'=>"<li>{link}</li>"//只会引用到该类模板
    ],
    [
    'label'=>'文章详情',
    'url'=>['site/view','id'=>1]//如果需要传参这种格式
    ],
    '编辑',//没有链接的
    ],
    'options'=>[//设置html属性
    'class'=>''
    ]
    ]);
    ?>
    

    注意:如果加入options可能会导致样式覆盖,达不到你想要的效果 ...

    立即注册
    更新于:2021-02-16 16:27:55
    推荐内容

    分享几个好用的bt搜索bt资源下载网址网站

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享

    全网最新bt磁力搜索引擎bt资源bt网站网址分享

    人气美女女优百度指数排行榜(波多野结衣,苍井空,三上悠亚,深田咏美,桥本有菜,北条...

    最强人造人深田咏美,业界的社交女王

    人生起起落落的三上悠亚,成名前的清纯风,怎么搭配出来的?

    业内第一大长腿,桥本有菜的腿究竟有多长

    波多野结衣,岛国业界著作最多的超级劳模

    日本AV界NO.1,苍井空是多少宅男的疯狂?

    美女女优视频混剪 This Girl-Laza Morgan

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享