php - Yii2 使用 PHP 7 的自定义验证问题
问题描述
我正在使用 PHP 版本 5.6.25 和 Yii2 版本 2.0.15.1 并且可以正常使用自定义验证,因为我将我的 php 版本更改为 7.0.10 模型给出了以下错误
{"name":"PHP Notice","message":"Array to string conversion","code":8,"type":"yii\\base\\ErrorException","file":"D:\\wamp\\www\\cfms-hc\\models\\CASES.php","line":210,"stack-trace":["#0 D:\\wamp\\www\\cfms-hc\\vendor\\yiisoft\\yii2\\validators\\InlineValidator.php(72): ::call_user_func:{D:\\wamp\\www\\cfms-hc\\vendor\\yiisoft\\yii2\\validators\\InlineValidator.php:72}()","#1 D:\\wamp\\www\\cfms-hc\\vendor\\yiisoft\\yii2\\validators\\Validator.php(267): yii\\validators\\InlineValidator->validateAttribute()","#2 D:\\wamp\\www\\cfms-hc\\vendor\\yiisoft\\yii2\\base\\Model.php(367): yii\\validators\\Validator->validateAttributes()
我的验证功能如下。
public function validateInstitutiondate($attribute,$params)
{
$institutiondate = date('Y', strtotime($this->$attribute));
//$institutiondate = $this->$attribute ;
$caseyear = $this->$params['CASEYEAR'];
//$aa = $params['CASEYEAR'];
//$caseyear = $this->$params->CASEYEAR;
if ($institutiondate != $caseyear) {
$this->addError($attribute, 'Institution date must be of same year.'.$caseyear);
//$this->addError($this, $attribute, '{attribute} must be of same year.');
return false;
}
}
并使用以下行进行验证。
['INSTITUTIONDATE','validateInstitutiondate','params'=>['CASEYEAR'=>'CASEYEAR']],
解决方案
这与 PHP 7.0 中引入的间接属性的优先级变化有关。在 PHP 5$this->$params['CASEYEAR']
中被视为$this->{$params['CASEYEAR']}
,但在 PHP 7 中被视为$this->{$params}['CASEYEAR']
. 您需要使用{}
来指定应如何处理表达式:
$caseyear = $this->{$params['CASEYEAR']};
请参阅有关此更改的升级说明。
推荐阅读
- python - 按日期排列的二元组
- python - 我的python2.7突然停止工作,抱怨一个python3.5脚本
- php - Laravel 表单不发布
- reactjs - react-konva - 同时运行精灵动画和过滤器
- node.js - TS 使用 Jest 模拟所有嵌套函数
- linux - 在 Linux x86_64 上使用 NASM 制作钢琴
- python - 对除 pandas 中的一列之外的所有列应用标准化
- ios - 向下滚动后再次隐藏 SearchController
- arrays - 如何在 Laravel MongoDB 查询中访问数组
- reactjs - 访问站点页面的问题 ReactJS , React Router