前言 大家可以从任何一个gii生成model类开始代码上溯,会发现:yii2的model层基于ActiveRecord实现DAO访问数据库的能力。...假设我们要份8张表,那么可以依据uid(用户ID)%8来决定订单存储在哪个表里。...有2个思路解决M库问题,1种是yii2通过改造直连多个地址进行访问多库,1种是yii2仍旧只连1个地址,而这个地址部署了dbproxy,由dbproxy根据你访问的库名代理连接多个库。...那么yii直接访问多Mysql实例怎么做呢,其实类似tableName() ,我们只需要覆盖getDb()方法即可,同时要求我们首先配置好4个mysql实例,从而可以通过yii的application通过...如果要做到用户无感知,那必须对ActiveRecord类进行继承,进一步覆盖所有class method的实现以便插入选库选表逻辑,代价过高。
前面我们讲述了yii2中如何使用modal以及yii2 gridview列表内更新操作如何使用modal的问题,本以为modal要告一段落可以开始新的话题了,但是实际问题往往超乎想像,这不modal弹窗提交的表单说是怎么验证的问题又出来了...yii2中,ActiveForm默认做了客户端验证,但是表单的提交,却不是无刷新的。也就是常常看到的表单提交后页面会刷新。...我们看具体实现: //表单提交操作,基本上不需要做改动 if ($model->load(Yii::$app->request->post()) && $model->save()) {...= \yii\web\Response::FORMAT_JSON; $model = new Model(); //这里要替换成自己的模型类 $model->load(Yii::$app...->request->post()); return \yii\widgets\ActiveForm::validate($model); } 如此一来就简单的实现了yii2异步无刷新表单验证了
我们做程序的时候,加密解密是绕不开的话题,使用yii2开发应用的时候,都内置了哪些有关加密解密(安全)方便的支持那?本文将为你揭晓。...相关环境 操作系统及IDE macOS 10.13.1 & PhpStorm2018.1.2 软件版本 PHP7.1.8 Yii2.0.14 在yii2中,管理加密解密的库叫做Security,它以yii2...generatePasswordHash & validatePassword generatePasswordHash & validatePassword经常被用来加密用户密码以及对密码是否正确的验证...一般用法如下 // 使用generatePasswordHash为用户的密码加密,$hash存储到库中 $hash = Yii::$app->getSecurity()->generatePasswordHash...该方法可以用来进行密码加密,不过yii2有更好的密码加密方案 generatePasswordHash。
前言 在项目中,推荐使用 Yii2 内置的 URL 工具类生成链接,这样可以非常便捷的管理整站的 URL 行为:比如通过修改配置改变整站的URL格式等。...URL 更多高级的用法参见官方文档,这篇文章仅仅介绍 Yii2 生成 URL 的几种方式。 Yii2 默认的 URL 链接格式 Yii2 默认的 URL 链接格式是指为开启 URL 美化时的格式。...在 WEB 应用和控制台应用中以通过以下两种方式创建 URL: \Yii::$app->urlManager->createUrl($params) \Yii::$app->urlManager...r=kernel/article/view&id=10,以下说明 URL 助手类 Url::to() 是如何工作的(不推荐): // 创建当前 URL // 显示:/?...r=kernel/article/view&id=10,以下说明 URL 助手类 Url::current() 方法是如何工作的(推荐): // 创建当前 URL(包括路由和参数) // 显示:/?
前面我们讲述了yii2中如何使用modal以及yii2 gridview列表内更新操作如何使用modal的问题,本以为modal要告一段落可以开始新的话题了,但是实际问题往往超乎想像,这不modal弹窗提交的表单说是怎么验证的问题又出来了...yii2中,ActiveForm默认做了客户端验证,但是表单的提交,却不是无刷新的。也就是常常看到的表单提交后页面会刷新。...我们看具体实现: //表单提交操作,基本上不需要做改动 if ($model->load(Yii::$app->request->post()) && $model->save()) {...看主要的验证操作,该操作是表单字段失去焦点时异步验证,同时如果直接提交表单,也会先执行该操作进行验证 public function actionValidateForm () { Yii::$app...response->format = \yii\web\Response::FORMAT_JSON; $model = new Model(); $model->load(Yii::$app
想要在Yii2这个PHP框架中很好的使用redis键值存储,那么首先就要推荐yii2-redis这个官方的Github库。...这个库能够很好的帮助我们在Yii2框架中使用redis,它提供缓存,Session以及ActiveRecord模式的支持。...localhost', 'port' => 6379, 'database' => 0, ], ] ]; 如此之后,你便能正常的在yii2...示例 简单使用 我们先来看一段最简单的使用redis的代码: $redis = Yii::$app->redis; $key = 'username'; if ($val = $redis->get($...get($key)]; } else { $session->set($key, 'Leon'); } return ['session' => 'no session']; 在简单的示范下,如何将
过滤器位置.png 定义过滤器 在Yii2中,自定义过滤器,需要继承 yii\base\ActionFilter 类并覆盖 yii\base\ActionFilter::beforeAction() 和...过滤器.png 然后覆盖基础过滤器的 beforeAction 和 afterAction ?...Session使用.png Cookie的使用 //获取cookie的对象 $getCookieObj = Yii::$app->request->cookies; //设置cookie的对象 $setCookieObj...= Yii::$app->response->cookies; /** * 添加cookie * 注意: * 使用add来添加add的参数必须是yii\web\Cookie对象 */ $setCookieObj...控制器中操作 public function actionList() { //获取页码,参数需和Pagination中配置的参数一致 $page=Yii::$app
.'%', false]); SQL 随机抽取十名幸运用户 $query = new Query; $query->select('ID, City,State,StudentName...->andWhere(['not', ['State' => null]]) ->orderBy(['rand()' => SORT_DESC]) ->limit(10); yii2...use yii\log\Logger; \Yii::getLogger()->log('User has been created', Logger::LEVEL_INFO); Yii2 获取接口传过来的...->request->bodyParams // get Yii::$app->request->queryParams; Yii2 生成url的两种方式实例: Html::a("链接1", \...' => $callback, 'data' => $result ); } return $result; 场景: 数据库有user表有个avatar_path字段用来保存用户头像路径
Yii2默认用的是英语(en-US),现在添加中文支持(zh-CN) 在component下添加如下块 'components' => [ ......但用Yii::t方法的主要原因是要实现多语言,如果只是显示一种语言,还不如做hardcode(yii2框架实际做的也是hardcode的语言显示) yii2没有提供现成的切换语言的控件,需要我们自己开发一个...实现的主要思路是把用户选择的语言保存到cookie中,每次用户访问页面前,将语言设置为cookie中的值。...5.增加一个动作(Behaviors),用来每次用户访问页面时修改语言。...($val) { $langs = Yii::$app->params['availableLanguages']; foreach ($langs as $key=>$value) { if(
一、漏洞简介 如果在使用yii框架,并且在用户可以控制的输入处调用了unserialize()并允许特殊字符的情况下,会受到反序列化远程命令命令执行漏洞攻击。...; class TestController extends Controller { public function actionTest(){ $name = Yii:$app...这里拿yii\rest\CreateAction::run()举例 /vendor/yiisoft/yii2/rest/CreateAction.php: modelClass([ 'scenario' => $this->scenario, ]); $model->load(Yii::$app...->getRequest()->getBodyParams(), ''); if ($model->save()) { $response = Yii::$app
当服务器端进行了存储后要生成一个key,将其返给小程序,以后小程序凡是发起需要用户认证的请求,都带这个key用来判断用户身份,在yii2中,这个key就是我们restful中的access_token。...以上是关于小程序登录的前后台逻辑,如果你使用yii2类框架,很多都内置了,并不复杂。 但是这里还有几个问题 小程序端何时进行登录逻辑? 发起请求时access_token过期了如何处理?...发起请求时access_token过期了如何处理?...这个问题最常发生的场景就是我们发送了一次需要用户认证的请求,此刻如果服务器端发现收到的access_token已经失效,会返回异常,此刻小程序一般要如何处理那?...用户认证 小程序的登录需要服务端的用户认证配合,当然我使用yii2框架,内置的restful已经支持了,如果你的系统不支持用户认证,可以自行建立access_token的生成机制,具体可以参考腾讯开放的小程序服务端框架
凡是我yii2学习社群的成员都知道,我不止一次给大家说构造表单100%使用yii2的ActiveForm来实现,这除了能和AR更好结合外就是自动生成csrf隐藏域,一个非常安全的举措。...就算是最新的浏览器此方法也不是绝对可用的,这涉及了用户的隐私,很多用户会设置浏览器不提供Referer,因此服务器在得不到Referer的情况下不能贸然的决绝服务,有可能这是一个合法请求。...添加Token CSRF攻击之所以能成功,是因为黑客完全伪造了一次用户的正常请求(这也是浏览器无法拦截的原因),并且cookie信息就是用户自己的,那么我们如果在请求中放入一些黑客无法去伪造的信息(不存在与...Yii2 首先要说的是每种CSRF防范措施都有其弊端,无论你的防范多么严密,黑客拥有更多的攻击手段,因此在重要逻辑上(必须写入和删除)必须非常小心,接下来我们把yii2框架在csrf上的部署说一下。...Yii::$app->getRequest()->validateCsrfToken()) { throw new BadRequestHttpException(Yii::t(
框架Yii2 1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。...例如换领优惠券,如果用户同一时间并发提交换领码,在没有加锁限制的情况下,用户则可以使用同一个换领码同时兑换到多张优惠券。...因此如果用户在有一个更新为已换领之前,有多少次请求,这些请求都可以执行成功。? 图片 <?php /** * Created by ZhengNiu....* @param string $key 锁标识 * @param int $expire 锁过期时间 */ public function __construct...($key, $expire = 5) { try{ $this->_redis = Yii::$app->redis; $this
本教程为整个数据库表进行创建迁移,弥补以前未做的工作,且仅适合于Migrations(2.0.8)版本用户及以上。...我们先找到一个核心文件:/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php 创建迁移的视图文件:/vendor/yiisoft.../yii2/views/createTableMigration.php 我们先打开核心文件(BaseMigrateController.php)方法:actionCreate 行数大概在:493行。...在作者这里原以为用Migrations新增索引的时候能该类型,所以就写上去了,谁知道后面发现索引类型,已经写死了,必须为unique类型,createIndex方法代码在:/vendor/yiisoft/yii2...现在开始到视图模板(/vendor/yiisoft/yii2/views/createTableMigration.php):我们修改up方法里面的代码,这里能看到只有一个自增ID。
Yii2底层分析 我是从入口处分析的。...yii\web\Application($config);//先从这入手 $application->run();//先不急,后面会提到 从上面注释的位置入口 $config为配置文件,这里我们来看看是如何加载配置文件内容的...->配置文件参数可以直接调用配置文件的内容 如:Yii::$app->vendorPath//输出框架路径 Yii::$app->components['redis']//输出redis配置信息 }...表面看起来没有太多的意义,实则不然,yii2的大部分组件都是以Object为基类的, 所以init函数很重要,控制器、模型、模块module,自定义组件等都可以去实现init方法。...createObject($this->controllerMap[$id], [$id, $this]); 其实在 $this->createController($route) 这个时候创建了控制器对象 下面看看如何加载
Composer 这个是做yii2开发的基石,除非没有办法使用,否则请不要放弃,除了更容易的安装yii2及第三方扩展外,能使用Composer代表着你的服务器最少能运行起来php-cli,那么你就可以使用...开发中 本段为你介绍我在yii2开发中一些习惯和小技巧,希望对你有用。...// 某个控制器的action中 public function actionCreate(){ $model = new User(); if(Yii::$app->request->...isPost){ $model->load(Yii::$app->request->post()); if($model->xxx == xxxx){...); defined('YII_ENV') or define('YII_ENV', 'prod'); 报错页面 对于一个稳定的程序,报错不要紧,要紧的是报错后的处理,既然用户觉得有好又对开发人员有帮助
Expression('count(*) as count , count(distinct mobile) as mnumber') ])->asArray() ->all(); Yii2...$id = Yii::$app->request->get('id'); $collection = Yii::$app->db->cache(function (Connection $db) use...->module))->runAction('index', $data); 获取GET数据 Yii::$app->getRequest->get('id'); // 效率更高 Yii::$app->getRequest...()->get('id'); ---- 视图中获取当前模块/控制器/方法id Yii::$app->controller->module->id; Yii::$app->controller->id Yii...view_hello_str) // 可以过滤掉代码 echo yii\helpers\HtmlPurifier::process($view_hello_str) ---- 用户组件登录修改
做完了基本的 restful 搭建,就需要接口认证和定义返回码了 一、yii2 支持的 3种认证方式 1、HTTP 基本认证: \yii\filters\auth\HttpBasicAuth 支持两种认证方式...,输入用户名和密码和只输入用户名(或 access_token) (1)默认是只输入用户名(或acdess_token) The default implementation of HttpBasicAuth...只输入用户名认证需要在你的 user identity class 类中实现 findIdentityByAccessToken() 方法 (2)如果需要验证用户名和密码,HttpBasicAuth 中的注释中也说明了配置方法...,不需要 access_token 验证,获取商品信息接口 需要 access_token 验证,access_token 的验证就使用 yii2 自带的 \yii\filters\auth\HttpBasicAuth...2、user 表就用 yii2 自带的 user 表 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username
我们看看在yii2中如何使用modal。 比如我们之前添加数据的时候,通常情况下会点击按钮跳转到添加页面,保存后再跳转到列表页。 现在我们希望点击添加按钮的时候,在当前页面弹窗添加数据,看具体实现。...按钮会异步请求数据,我们修改请求操作方法如下 public function actionCreate() { $model = new Test(); if ($model->load(Yii::$app...modal", 同时设置 data-target="#identifier" 或 href="#identifier" 来指定要切换的特定的模态框(带有 id="identifier") 以上,我们仅仅是在yii2...思考两个问题 modal如何结合gridview进行使用 modal中如果使用的是表单,表单提交后如何对数据进行验证
. */ public static function getDb() { return Yii::$app->get('gdb'); } 当然您也可以用...// 配置主服务器组 'masters' => [ ['dsn' => 'mysql:host=localhost;dbname=gather'], ] ]; 以上是yii2...4、model的方法应用 当然yii2还有一些CDB的类用法,createCommend写sql这种我不是很推荐了,model自身会去绑定很多的功能让大家去使用以及理解。...还有很多朋友会去纠结联表的事情, yii2的model里支持联表,但是从性能考虑,尽量避免联表。...如何避免联表: 如查询文章列表,其中一项为分类名称,通过list取出文章分类的列表,将相对应的分类列表中分类名称, 这样的操作比联表效率要高。
领取专属 10元无门槛券
手把手带您无忧上云