分类 Yii 2 框架 下的文章

Model类或者ActiveRecord类,里面会有一个rules,规定了所有的attribute的限制条件。
然后呢,万一生成的时候,把id也写到rules里,而且是['id', required]
好了,就傻逼了,保存不了,而且不报错。

而且,更要命的是,transaction还不回滚!!!

可以说,用gii生成的代码问题多多,都遇到两回因为gii的原因导致的问题了。

2018年6月8日更新:
这是由于如果$user->save()失败,会返回false,但不抛出异常,应该用if判断一下,如果返回false,则手动抛出异常。

symlink(): Cannot create symlink, error code(1314)

这个error属于Windows系统权限问题。

怎么解决呢?
https://superuser.com/questions/124679/how-do-i-create-a-link-in-windows-7-home-premium-as-a-regular-user

Creation of symbolic links requires the SeCreateSymbolicLinkPrivilege (“Create symbolic links”), which is granted only to administrators by default (but you can change that using security policy).

To change the policies:
 - Launch secpol.msc via Start or Start → Run.
 - Open Security Settings → Local Policies → User Rights Assignment.
 - In the list, find the "Create symbolic links" item, which represents SeCreateSymbolicLinkPrivilege.
 - Double-click on the item and add yourself (比如我,就是"guiyumin") to the list.
 - The changes will apply when you log out and log in again.

Yii框架其实是一堆零件的集合而已,那么结合其他的零件,就可以组建成一个完整的web app,于是就有了yii2-app-basicyii2-app-advanced这2个模板,而且正在搞yiisoft/yii2-app这个yii 2.1版本的模板。

这些都是模板是有问题的,尤其是不适用于某个特定目的,比如做一个电商网站。所以我是不是可以在这基础之上,尝试这搞一个的模板,专注于电子商务?

考虑要改进的地方如下:

  • 要和前端资源解耦,以便更方便的利用npm的繁荣生态;
  • 充分利用JavaScript的生态,毕竟JavaScript is eating the world
  • 充分利用composer的生态,不能仅仅着眼于和yii融合很紧密的library
  • 充分利用module,把各种常用便捷云服务都整合进来,包括但不限于blogpaymentemail(mailgun, mailchimp之类的邮件通知或邮件激活)sns(短信)wechataws s3
  • adminlte等后台管理系统,甚至是ant design pro这样的专门的后台管理系统
  • 利用各种快速开发的技术,敏捷开发优先,更好满足电子商务的特点,例如打折促销等活动
  • 插件开发商业化,学学人家wordpress
  • web design商业化,可以提供几套常见的设计,例如淘宝,京东,ebay,Amazon等
  • 接入包括Google API在内的多种api,来获取信息,判断用户profile等
  • 待续。。。。

  • Stripe有代码,可以照抄,但是,那个代码是手写Form,没有用到Yii2里的ActiveForm,因此就没有csrf

    In case ActiveForm is used, token is added automatically.

  • 所以需要手动添加一个input type="hidden",类似这样:
  • 如果不加这个csrf,会总是返回 Bad Request (#400) Unable to verify your data submission.

- 阅读剩余部分 -

Yii2 Gii生成代码的bug

基本上都用会用Gii生成代码,省事嘛,但是,最近一个项目有点恶心。

比如,在MySQL里建了一张表,一个字段是status,设置为booleanMySQL其实是把这个字段设置为tinyint的。

但在Gii里生成的model代码里的rules里,就成了string

这个小破bug,让我浪费了1个多小时,当然,我在提issue的时候,说浪费了我3小时

具体可以看这个: issue地址

2018.5.25更新: 此issue被关闭了,因为有人提出了解决方案,比较容易修复。被关闭的时候,Yii的核心开发者说了一些莫名其妙的屁话,对于fix bug没有任何帮助。Yii社区的氛围很不好。我只能呵呵了。

还是抓紧学其他的框架吧。