例如,在应用开发的过程中,新建了一张表,在应用部署到生产环境后,发现需要为这张表创建一个索引以提升查询性能,等等。.../yii2/views/createTableMigration.php 我们先打开核心文件(BaseMigrateController.php)方法:actionCreate 行数大概在:493行。...这里为什么要新增条件 WHERE Key_name'PRIMARY',因为当你有个自增主键的时候,他也会输出出来,但这个自增主键并不是我们想要的索引字段,所以我们使用条件将他干掉。...现在开始到视图模板(/vendor/yiisoft/yii2/views/createTableMigration.php):我们修改up方法里面的代码,这里能看到只有一个自增ID。...如果报表已存在的错误的话,那么就是你没有将表删完,Migrations创建迁移 跟 其他操作的时候,会自动新增一张为 migrtions的表,这张表是记录的。
Composer 这个是做yii2开发的基石,除非没有办法使用,否则请不要放弃,除了更容易的安装yii2及第三方扩展外,能使用Composer代表着你的服务器最少能运行起来php-cli,那么你就可以使用...// config/web.php 'language'=>'zh-CN' 静态缓存问题 在用yii2的时候,我们习惯将静态文件(图片、css文件、js文件等)放到资源类中管理,但是可能存在浏览器缓存问题...,别说你的程序将来没有移动端,早早的选择一个支持emoji的数据库会避免我们下载第三方库去解决报错问题。...$orders = $customer->orders; } 上面的代码执行了101次查询,如果数据更多那?对于上面的问题我们是这样解决的。...,一般表内都会有记录生成时间和更新时间字段。
框架安装问题 在Yii2社区里经常会遇到一类问题,那就是 安装完官方推荐的版本后 1 为什么没有vendor文件夹?...在Yii2 中,vendor是composer下载的依赖库文件,官方的项目模板代码里只有其自己的项目文件,而其依赖的yii框架等类库,都记录在composer.json里面,只要安装好composer,...2.1 使用 composer remove 删除包 所删除的包必须在vendor文件夹下的composer.json中有记录,并且在删除包的同时,所有的包会重新安装一次。...4 vendor路径问题 vendor路径问题造成的目录或文件不存在提示 假设我们的项目路径是 E:\sources\templates 在Vendor路径有问题时,会出现以下类似的问题,即某个composer...在工程的主配置文件main.php下有关于vendor的配置入口,VendorPath具体值,要结合配置文件的路径,请参照下面的两幅图以及相关的路径配置 第一幅 ?
之前在liunx上安装过yii2,感觉很简单,今天在windows上折腾了一下,发现缺少各种扩展,费了不少功夫才解决,现在把过程和注意细节记录下来,以备以后在安装时查看。...出现上图图案表示已经安装成功。...apiweb/bootstrap/apidoc 注:E:/apiweb/bootstrap/apidoc是程序的目录,建议写全目录 之后等待很长时间,注意还需要书写github上的token,具体获取方法自行查询...看着上面的操作步骤简单,但是往往实际运行时会出现各种问题,以下是出现的各种问题汇总。 问题一:缺少openssl。...配置数据库 common\config下的main-local.php文件,改成自己的 然后,可以导入一个yii2自带的一个user表,执行成功后,会自动在你的库里面创建user表和migration
MyBatis Plus的“幻查” 规范到底要怎样使用哪几个查询函数 为什么会出现幻查?...还有幻删为什么会删不掉 先来解释一下 幻查和幻删 不知道前人有没有提及这样的概念 就是 他提示查询成功了 能够根据id查到对应的数据了 但是有一天这个表需要增加字段 增加完以后你就发现 他查出来的数据是没有新字段的
为什么80%的码农都做不了架构师?>>> ? 先说一下Yii框架PHP运行环境的情况。 Yii2.0.12版本使用\yii\base\Object类,Object作为类名PHP7.2报错。...PHP7.2的Yii2最小可用版本为2.0.13。 提供若干升级的方法。 项目使用Composer管理bower和npm前端资源。...composer-asset-plugin composer global require "fxp/composer-asset-plugin" 指定类库更新 composer update yiisoft/yii2...yiisoft/yii2-composer bower-asset/jquery.inputmask Composer记录如下 Loading composer repositories with package...修改composer.json "require" : { "yiisoft/yii2": "2.0.16" }, "replace": { "bower-asset
'/db.php'), 'gdb' => require(__DIR__ ....'/gdb.php'), db或gdb的配置文件如下: if (YII_ENV == 'dev') { return [ 'class' => 'yii\db\Connection...public static function getDb() { return Yii::$app->get('gdb'); } 当然您也可以用gii进行创建,选择连接池处会出现你多数据库配置的相应...(1)beforeValidate方法 save操作之前一般会执行validate验证方法,顾名思义:validate前做的操作,记住操作后必须返回true。...(3)查询方面的建议 至于model的数据查询我就不介绍了,这方面教程肯定挺多的。还有很多朋友会去纠结联表的事情, yii2的model里支持联表,但是从性能考虑,尽量避免联表。
config.php'); 命名空间和自动加载 为什么把命名空间和自动加载放到一块说呢?...在一个PHP项目中,类特别多的时候,如果类名重复的话就会造成混乱,而且相同文件夹内也不能存在同名的文件,所以这时候命名空间和文件夹就搭档出场了。...r=index/login 后,系统会自动调用/app/Controller/Index.php下的login方法。完成了这么一个简单的路由。...③ 构造其__clone魔术方法,防止clone出一个新的对象; DB类的sql查询函数 DB查询函数是一个很复杂的部分,它是一个自成体系的东西,像TP和YII的查询方法都有其独特的地方。...③ 一量程序中的函数出现异常结果或状况,如果使用函数的return方式返回异常信息,层层向上,每一次都要进行return判断。使用异常处理我们可以假设所有的返回信息都是正常的,避免了大量的代码重复。
config.php'); 命名空间和自动加载 为什么把命名空间和自动加载放到一块说呢?...在一个PHP项目中,类特别多的时候,如果类名重复的话就会造成混乱,而且相同文件夹内也不能存在同名的文件,所以这时候命名空间和文件夹就搭档出场了。...r=index/login 后,系统会自动调用/app/Controller/Index.php下的login方法。完成了这么一个简单的路由。...③ 一量程序中的函数出现异常结果或状况,如果使用函数的return方式返回异常信息,层层向上,每一次都要进行return判断。使用异常处理我们可以假设所有的返回信息都是正常的,避免了大量的代码重复。...方法,在catch代码块中,就可以直接使用$e->log来记录一个异常日志了。
作为自己的周总结,平时遇到的问题,以及一不小心踩的坑,记录下来自己当复习: 表单验证 表单验证,两个参数中至少需要一个(2个以上): public function rules() {...where 多个查询条件示例: User::find()->where(['and', ['xxx' => 0, 'yyy' => 2], ['>', 'zzz', $time]]); 查询的时候...FROM `post_comment` WHERE `status`=1 ORDER BY `created_at` DESC) `tmpA` GROUP BY `post_id` sql计算字段中相同值重复次数...给mysql数据库表添加字段后,立即使用这个字段时会出现未定义的情况(Getting unknown property) 原因:yii 对数据表结构进行了缓存。...app->getRequest()->getReferrer() 前端显示 英文不换行问题 当GridView和DetailView列表中的某一条内容为连续的英文或数字(比如网站链接等)时,该内容会不换行
yii的默认方法是index,可以在vender/yiisoft/yii2/base/Controller.php 中进行初始设置,也可以在控制器中改写defaltAction='action'。...5.布局模式 yii会默认开启布局模式,其布局模板为view中的layout中的main.php,我们可以在veder/yiisoft/yii2/web/controller.php基础类中public...yii里的QUERY查询语句构造器非常简单好用,它可以用在模型和控制器中,虽然可能会造成模型与表不对应,但其构成接近sql语句,使用它可以轻易写出复杂的sql语句而不必严格遵从yii的内置规则。...11.自定义函数 yii里面自定义函数可以在vendor/yiisoft/yii2/helpers/文件夹里,新建一个XXX.php文件,然后定义一个自定义类,再定义静态方法YYY()。...使用时应用基命名空间,use yii\helpers\XXX,然后用类来引用基静态方法XXX::YYY() 12.关联模型 yii里面的关联模型,用来在取得当前表内的一条记录时,会取出对应表的记录。
为什么80%的码农都做不了架构师?>>> ?...在项目实施过程中,往往把一个大项目进行分拆成几个独立的项目,项目用完全独立的域名和文件,可以放到不同的服务器上的独立分项目 yii2就可以这样进行 譬如 做一个电子商务系统, 1.产品,分类,首页使用域名...account.domain.com 3.购物车页面使用域名:cart.domain.com 4.下单页面使用域名:checkout.domain.com 分拆成4个域名子项目 这样就需要在二级域名之间进行session共享同步 在yii2...session共享 两个完全独立的yii2是可以使用yii中的session读取的 注意配置 'request' => [ 'class' => 'common\web\Request...不然你的部分session值将会出现问题的!
续言 接着完善自己的PHP框架,本次更新的主要内容有: 介绍了异常处理机制 完善了异常和错误处理 数据表跟Model类的映射 异常处理 异常处理:异常处理是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况...个人总结其优点如下: 可以快速终止流程,重置系统状态,清理变量和内存占用,在普通WEB应用中,一次请求结束后,FAST CGI会自动清理变量和上下文,但如果在PHP的命令行模式执行守护脚本时,它的效果就会很方便了...一量程序中的函数出现异常结果或状况,如果使用函数的return方式返回异常信息,层层向上,每一次都要进行return判断。使用异常处理我们可以假设所有的返回信息都是正常的,避免了大量的代码重复。...使用‘describe table_name’ 查询语句; 分析查询结果:对每一个字段,有Field(字段名)、Type(数据类型)、Null(是否为空)、Key(索引信息,‘PRI’表示为主键)、Default...真是越学习越觉得自己认识不够,在看一些PHP框架源码时,有时候会感觉自己还差得很远,那种整体感和布局感,估计需要时间和经验的积累吧。
为什么80%的码农都做不了架构师?>>> ?...` WHERE user.id = order.user_id) exists用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。...当子查询返回为真时,则外层查询语句将进行查询。 当子查询返回为假时,外层查询语句将不进行查询或者查询不出任何记录。 因此上面的SQL语句旨在搜索出所有下过单的会员。...如:user表有10000条记录,order表有1000000条记录,那么exists()会执行10000次去判断user表中的id是否与order表中的user_id相等....但是:user表有10000条记录,order表有100条记录,那么exists()还是执行10000次,还不如使用in()遍历10000*100次,因为in()是在内存里遍历,而exists()需要查询数据库
考虑一个场景,一个函数需对相同表进行多次查询,多次查询中有部分查询条件相同。对于这种情况,Yii2和thinkphp5的实现方式要格外小心。...在Yii2中,可以直接使用clone 复用共同的查询条件,但是thinkphp5的话,必须把相同条件再重复写一次。 例如,需要查询总有效文章数,以及今日发布有效文章数。 Yii2 版本 ?...查询最终的执行时通过model类中的getQuery()方法获得的query对象执行的。所有的查询条件最终都绑定在query对象当中。 ?...虽然是在clone出来不同的两个model添加查询条件,但是最终都是添加在相同的query当做。 所以第一条语句就会有所有的查询条件。...最终修改,新建query子类,添加__clone方法,指定clone后对新对象执行php $this->setBuilder();保证 clone之后的builder是一个新实例。 ?
概述 PHP语言从1995年发布,至今已经有29多年的历史,在期间涌现了成千上万的MVC框架,大致可以将其分为以下三大类: 公司内部自研 有大量的公司会自研MVC框架,会根据自身业务的特性打造适合自身的...,不易修改,学习成本相对较高,故直到近几年才出现,比如Yaf、Phalcon等。...Yii2框架在PHP-5.6及PHP7下echo hello world的QPS,并观察平均响应时间及CPU。...20 1577.16 13.375 83% 500000 50 1626.09 145.953 89% PHP-7/Yii2 开启opcache,64个php-fpm进程,输出hello world...升级PHP-7.0,Yii2框架的性能提升43% PHP-5.6升级PHP-7.0,某服务性能提升170% 单纯将业务升级PHP-7.0,能够提升很大的性能
因此在极端情况下,有可能会出现读取文件头不对尾的情况。如果遇到多个请求同时写缓存,会涉及到并发问题。Yii2读取缓存加共享锁LOCK_SH,写缓存加排它锁LOCK_EX保证读写数据完整。...Yii2缓存过期方式通过修改文件的更改时间记录过期时间。ThinkPHP5 则是在缓存文件中插入过期时间数据,根据文件最后修改时间以及过期时间确定缓存是否过期。...Yii2缓存有gc机制,在每次写入缓存的时候会以一定的概率删除过期缓存文件。ThinkPHP5 则是在读取缓存的时候,如果缓存过期则删除。...如果缓存保存的是多层级的文件夹,Yii2会删除缓存文件夹,但是ThinkPHP5 不会删除。因此ThinkPHP5 需要开发者编写额外的脚本去定期删除缓存文件,避免空间占用。...PHP会缓存对文件状态信息的检查结果。如果在一个脚本中多次检查同一个文件,只在最初会读取信息,其他都是从缓存中获取。
另外这样做可以避免重复,比如开发者abei2017和开发者anan2017多做了库yii2-ext这个扩展,因为有命名空间的限制,所以不不会冲突。 description * 一个包的简短描述。...比如看下面yii2的一个description。...比如我们开发的yii2扩展,它的类型就是 yii2-extension,而yii2程序提供了一个逻辑进行该包的处理。..."require": { "yiisoft/yii2": "*", "emojione/emojione": "^3.1" } 则必须还要安装yiisoft/yii2和emojione/...:PSR0里面最后一个\之后的类名中,如果有下划线,则会转换成路径分隔符,如Name_Space_Test会转换成Name\Space\Test.php。
测试框架版本说明 测试yii2版本 77103@DESKTOP-C2JB47R MINGW64 /e/dev/basic $ ....The following commands are available: 配置文件 配置memcache,在web.php / main.php 中配置 'components' => [...当设置了有效时间时,Yii::$app->cache->set('key','value',60);比如60秒,就会出现取不到key对应的value值,网上和论坛里搜了搜,没有找到解决办法,也有很多phper...所以特意去看了看底层代码,引用的memcache类为Yii2自带的yii\caching\MemCache,Yii::$app->cache->set('key','value');这句代码会自动调用memcache...类下的setValue方法来设置缓存,所以问题也许就出现在这儿了。
Mac上下载安装Vagrant、配置打包属于自己的开发环境(使用Homestead后续也会更新出来) 为什么要使用Vagrant? 保证PHP项目本地和服务器环境一致,避免出现一系列的问题。...下载速度可能有点慢,尽量都使用最新版,如果两个软件版本相差太大,可能会导致homestead无法使用。...) 和 LNMP( Linux + Nginx + Mysql + PHP) 配置好3个比较流行的PHP框架运行环境 Yii2 Laravel5 ThinkPHP5 基础环境 VirtualBox...---- 下载laravel (PHP >= 7.0.0请注意laravel运行环境,后期会写出Homestead的教学) 注意事项 tp5 runtime目录有可写权限 yii2 runtime、...vagrant halt 如果执行vagrant up 出现卡死(请修改Vagrantfile文件,打开vb.gui = true 查看调试)
领取专属 10元无门槛券
手把手带您无忧上云