执行php composer.phar global require "fxp/composer-asset-plugin:1.0.0"
,也报错
求大神指导。
被墙了骚年。把 composer.json 里的更新地址换成国内的吧。
如果用的是PHPstudy,在PHP扩展设置里打勾,还有执行fxp/composer-asset-plugin:~1.0.0报错有可能是打错了,·和~要区分,我之前也是同样问题
执行php composer.phar global require "fxp/composer-asset-plugin:1.0.0"
,也报错
求大神指导。
被墙了骚年。把 composer.json 里的更新地址换成国内的吧。
如果用的是PHPstudy,在PHP扩展设置里打勾,还有执行fxp/composer-asset-plugin:~1.0.0报错有可能是打错了,·和~要区分,我之前也是同样问题
win7下安装token出问题 粘进去总是提示no token 试了很多遍有没有解决办法 或者是跳过这一步的办法
最好确认你贴的是token代码,如果前面有空格或者换行什么的,自然是失败。
可以贴到文件编辑器里确认一下,或者直接手动输入
你粘进去的啥
有三张表需要通过中间表关联查询,中间表关联字段 两个关联字段数据类型不一样,需要转换一下。怎么转换。如下图(错误代码)
AR查询
正确的sql语句
如何转换成下面正确的sqlSELECT COUNT(*) FROM "report_record" LEFT JOIN "users" ON "report_record"."ident" = "users".uuid || '' LEFT JOIN "user_certs" ON
"users"."uid" = "user_certs"."uid" LEFT JOIN "room" ON "report_record"."rid" = "room"."rid"
数据类型转换?你给的语句好像也没转换吧
这个三个大类,有一个爹,叫组件。
1、属性 很好理解,就是类的一个部分,或叫成员。然后,通过php 魔术方法 __get
__set
在调用或设置时触发 访问类的成员,这个在yii2中常用到的。非常方便,好用。
2、行为 behavior 这个也好说。如:在入库或修改 操作可以定义 自动填充时间,我理解成方法执行前会自动执行的定义的代码。这块我用的不是很多,还不是很深入。请大神补充。
3、事件 这个事件我看文档,到现在也明白么回事。他的应用场景,什么时候用过。求大神解惑。。
4、谢谢回主。
确实不太好理解,主要是这些概念实在是又点绕,简单的理解呢,你可以把事件理解为钩子,举个例子,比如用户一登陆就自动发邮件和短信,或者数据库一执行sql就记录sql语句以便分析性能等,这是phalcon2的事件代码,你可以稍微理解下:
yii2的事件也差不多的,首先得on绑定,类似于phalcon2的attach附加到那个组件,目前yii2支持全局函数,对象以及类,回调绑定,然后在triggers触发就可以了,至于更深层次的理解,得多测试代码了!希望能帮到您!!
纠正下楼主的
类的成员包括类属性和类方法 属性属于成员
事件可以参考js 当你触发了什么事件 然后执行什么动作
事件:就是观察者模式!!!
设计模式而已,只是把名字叫 “事件”,
你也可以设计类似的,取名叫 “大事件”,“事件大”。。。
例如:我把文章页的description单独做为一个插件。单独建一个description表和model。
文章添加或更新成功后,通过afterSave把文章id和description的值传给description的model中完成这个功能。
但是因为类似的功能比较多,想通过后台管理哪些功能是否开放。
那么,就是说我插件的model和view表单都是动态调用的。请教这种功能实现思路。
建一个功能表,字段如下
功能ID 功能名字 功能是否开启 功能文件路径
当功能开启的时候,导入功能的SQL文件建立具体功能(描述)表,当功能关闭时,导入删除具体功能表的SQL
使用功能之前先去查功能表这个功能是否开启
我感觉要么是SESSION过期时间没设置好,或者是SESSION有缓存。
$session = Yii::$app->session;
$session->open();
$session['user'] = [
'id' => $only[0]->id,
'permissions' => $only[0]->permissions,
'phone' => $only[0]->phone,
'password' => $only[0]->password,
'mask' => $only[0]->mask,
'name' => $only[0]->name,
'sex' => $only[0]->sex,
'birthday' => $only[0]->birthday,
];
$this->user = $session['user'];
$session->close();
'session' => [
'timeout' => 2,
],
用Yii::$app->user->login($user);自动就会用session保存用户信息,如果用户已经登录,直接用Yii::$app->user->identity就可以取到$user的信息了。 可以用Yii::$app->user->isGuest()判断是否登录。Yii::$app->user->logout()退出登录。
小伙,你每次登陆的时候不更新用户的 SESSION 信息吗?
快点给我金钱,哈哈
如果是要保存登录信息,自动登录的话,应该是要用cookie保存的,你用session的话,浏览器关闭了就木有了,就得重新登录了~
如果是要做自动登录,数据库中增加auth_key字段即可,模版中的登录程序就会自动实现记住我自动登录的
你既然调用了Yii::$app->session就不用再调用open了
了解原理,你给你写下原理:
知道这个原理,你就可以封装函数了,比如封装一个设置过期的session函数了
调用setCookieParams();
session的过期时间配置有误,不是用timeout,
‘session’ => [
]
怎么知道用户是否在线的?如何设计
首先,建一个MEMORY引擎的表tbl_online
,字段分别为ip
, time
,当用户访问的时候,先判断此ip
是否存在于表tbl_online
,如果不存在,插入一条新记录,如果存在,更新time
。在线会员,可以把ip写成用户的id。
然后,写一个计划任务,每分钟执行一次。比如,咱们网站在线的定义为半小时访问过,所以计划任务会把time
在半小时之外的删除掉。
其实MEMORY引擎已经很快了,可以看做是对内存的操作。当然如果换成cache
会更好。
两种方式
1.用户表里有个字段 代表 此用户是否在线
2.设计一张在线用户表 用户登录之后 写此表
‘当用户访问的时候’是指访问任何页面,那就是在任何一个页面都要进行判断么?
Good.
如题,
$model = $this->findModel($id);
$_POST['Test']['update_time'] = time();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['index']);
}
我想在保存之前加一个更新时间,但是直接修改$_POST
没有用数据库update_time
字段并没有数据。
废这些劲干毛。。。。这样不一样吗~
不是有behaviors自动更新时间么?
学习了,谢谢
请教个问题:
Yii2 updateAll方法,如果一条数据存在包含多个Object的数组,$set object的值,只修改第一条,怎么让所有满足条件的object对应值都修改?
{
}
上面是我的数据库格式
我要修改props满足条件的所有数据,但是只会更改第一条
按照MVC来说,更新时间属于M的,建议放在Model里,最后就是使用befereSave()方法就可以保存好了,如下
public function beforeSave($insert){
上面大神都说的很好,再教你一招,不写代码。
mysql 时间字段用 timestamp 类型,设置为 ON UPDATE
(自动更新时间)
文档里,文件上的示例代码。
控制器里
if (Yii::$app->request->isPost) {
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');
加上验证,改成
if (Yii::$app->request->isPost && $model->validate()) {
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');
于是文件就不能上传了,提示请选择一个文件,是不是bug?
为嘛gii自动生成的代码里都不带$model->validate(),谁能彻底的解释下?
为了安全是不是该把服务器端和客户端验证都做了?
load放到imageFile属性赋值uploaded对象后,另外load了就不要validate了,load默认自动验证。
imageFile还没有数据加载进模型了 如何验证?验证得放到下面赋值了再验证。
['password', 'required', 'on' => 'create'],
['password', 'string', 'min' => 6],
['password', 'check'],
上面是rules()里面的规则, password字段不是数据库自带的,我添加进去的. 按理来说第三行check方法会在所有场景下都验证,但为什么只在create时候执行, update时跳过了呢?
而且我在调用之前也设置了 $model->scenario = 'update';
scenarios()也设置了
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['update'] = ['username', 'email', 'status'];
return $scenarios;
}
附上一段代码,是在insert/update之前调用的validate函数,如下;注意其中的
这里的activeAttributes是当前的scenario所包含的属性,即 [‘username’, ’email’, ‘status’],接下来的校验之针对这几个属性做教研,不会针对password做校验。
其中 $validator->validateAttributes($this, $attributeNames);
是获取当前scneriao的所有validator,然后利用这些validator对scenario包含的属性进行校验;根据你的设置,当前的validator是包含['password','check']
的,但是validator检验属性的时候是要检验validator指定的属性(password)和scnario属性(email,username…)的交集;所以实际上该validator啥也没做。
修改一下update需要检验的属性就可以了:$scenarios[‘update’] = [‘username’, ’email’, ‘status’,’password’];这样update场景下会执行pssword check和min validator
假如
scenarios 沒有設置
你的寫法會讓所有的欄位被驗證
但你
override scenarios 的方法, 也設置了情境如下
$scenarios[‘update’] = [‘username’, ’email’, ‘status’]; // 當你情境為 update 時, 指驗證後方指定的欄位
你後方尚未加入 password 所以會跳過阿~~~
按你现在的配置,只是在create时才是必须的呀,别的场景下略过也不算错误吧。