谁一开始就是大神?

PHP 第104页

PHP

为什么我Model->load()后属性还是为null[2.0]

Marklove阅读(76)

public function actionIndex(){
    $student = new Student();
    if($student->load(Yii::$app->request->post())){
        return $this->render('student_info',['student'=>$student]);
    }else{
        return $this->render('student');
    }
}

这是Controller里面的代码,post()返回的数组我查看了是有值的,load方法也执行过了,但是student对象的属性查看了依然为null,这是为什么?

发出你视图的代码,这样看不出什么问题
我也遇到了这个问题,研究了很长时间,后来决定看源代码。
打开 vendor/yiisoft/yii2/base/Model.php
load()方法调用了setAttributes($values, $safeOnly = true)。
$values就是我们post过来的数据,$safeOnly没有理解,默认true,但是load()在调用setAttributes()没有传递$safeOnly参数,导致默认$safeOnly等于true
setAttributes()方法中有这样一句
$attributes = array_flip($safeOnly ? $this->safeAttributes() : $this->attributes());
入托$safeOnly = true 调用 $this->safeAttributes(),否则调用$this->attributes()
这两个方法应该都是返回当前model所定义的字段数组,但是$this->safeAttributes()始终为[],我试了一下$this->attributes()可以正常返回字段数组。
所以解决办法:
在load()调用setAttributes()时,传递第二个参数$safeOnly为false,一共两处。
再测试成功了。 🙂
我一直在使用Laravel这个框架,非常的好用,而且感觉非常专业bug极少(目前我还没遇到过)。我也是刚接触yii这个框架,第一天就卡在了这里,看着官方教程做的。瞬间对这个框架没什么信心了。
我也一直在查是啥原因,感谢!!
应该是没用对吧
load()方法是考虑安全性的,所以load赋值成功的前提是你的model有rules,而且你的属性加了相关的rule
例如
这个问题 也可能是设置了 scenario 后, 但是Model里没有写需要验证的字段

禁用JQuery以后为啥还有的页面会加载[2.0]

HarryJames阅读(69)

public $depends = [
        //'yii\web\YiiAsset',
        //'yii\bootstrap\BootstrapAsset',
];

在AppAsset.php禁用掉JQuery以后,再用gii生成的CURD页面后,除了view页面中还会出加载JQuery

GridViewListView 都依赖于 jQuery

yii2.0.3如何部署到网络服务器[2.0]

coolEagle阅读(76)

1.我用composer新生成一个yii(2.0.3)应用到xunwu这个文件夹,我只把这一个文件夹上传到我的服务器上,用http://域名.com/xunwu/web/index.php访问不到,请问为什么会这样?需要上传其他文件夹吗?(例如framework文件夹在2.0.3里不需要吧?)还是缓存问题?(但这是刚用composer生成的没有修改过的)

2.如果是在本地制作、建立数据库、测试之后再上传(即不是刚生成的应用),除了db.php(数据库配置)和域名需要修改外,缓存要如何删除?已经建好了站迁移服务器略蛋疼。

请详细说明一下,谢谢!

请问是怎么样上传?建议使用git
如果你指的是需要在网络上发布你的网站,那么你的网站根目录应该是web文件夹,而非YII2 ROOT,如果你是虚拟主机,还需要参考文档的共享主机那一章节。
同问这个问题。。。到底需要上传哪些到哪里?
这样就解决了?

可有人会Yii2-admin这个东西啊[2.0]

Swiftsuper阅读(81)

安好了,不会用。比如那个添加rule的时候那个类名填啥我都不知道。试了很多都不行。。。

示例说明:
新建common\rbac\AuthorRule(此类extend yii\rbac\Rule), 然后新建rule的时候,输入
rulename:AuthorRule
classname:\common\rbac\AuthorRule
提交即可成功
这个建议你还是先去看看视频,看看别人的代码,再来研究。
也是搞不太清要怎么填写,后来看了一下源码,应该是要输入:
1、rule name:随意取的名字
2、class name:是一个类名,继承自yii\rbac\Rule的子类,其实就是自己写的rule实现
看一下保存rule的实现:

Yii2客户端验证有时候需要alert弹出错误消息,如何实现[2.0]

Ellieyak阅读(73)

Yii2 客户端验证有时候需要 alert 弹出错误消息,如何实现?
yii默认是把错误消息显示在表单后面的。 有时候前端需要直接 alert错误消息,这个时候怎么实现呢?

验证消息的提示是通过yii.validation.js最终实现的,这个js文件在yii/web/assets/下第一个文件夹里,你找到这段语句:
然后在
之后添加一句:
然后保存,这样就可以使得验证错误信息在input触发blur的时候,不仅显示在页面,也会弹出对话框了。
By ArthurSS 2015/4/3
可以使用CSS定位消息的显示位置吧。

验证规则后值被莫名其妙清空了[1.1]

Fionahope阅读(71)

我描述大概的情景:我使用yii中内置的CUploadedFile上传文件后,重新上传图片时,由于上传文件为空,所以我把原来的字段值重新赋回去,表示不修改原来的图片,但是在调用save()方法保存修改时,之前被赋值的图片字段居然被清空了,经过我排查后,最后锁定问题来自于调用save()方法时默认触发validate()方法进行规则验证()后,之前被赋值的图片字段居然变成了空值(注意赋值操作是在save操作之前),莫名其妙被清空掉了,不知道大家有没有遇到过这样的问题?

如果你不想改掉这个字段的话,可以把它unset掉
那应该是你没有判断是否为空,你將空的数据也传入了数据库,那数据库就帮你保存啦

用User::model()创建模型返回为null[1.1]

Hazelhope阅读(74)

yii 中使用User::model()->find('username=:name',array(':name'=>$this->username));创建模型出现Call to a member function find() on a non-object错误,而改成$userModel=new User();就没事,何解啊?我的模型User.php都已经定义好了,求高手解答啊!!!

说明User::model()不是一个模型
有可能是你在User里面没有写model这个静态方法呗

Yii2获取用户输入的数据[2.0]

likelydear阅读(76)

if ($model->load(Yii::$app->request->post()) && $model->save()) {
  // 获取用户输入的产品名
  Yii::$app->request->post("pro_name");//没获取到,请问各位是如何解决的?
}

这很简单啊,你已经做好的数据传递(load)和保存(save),在函数里输出试试:
如果没有赋值显示null,那就是你的model或者view的问题了

Yii2的model里边的rule会时候执行?[2.0]

Wendyhope阅读(76)

请教rules的配置是什么时候执行的
$model->load()还是$model->save()
如果load时候没有load到值可不可以设置一个默认值
如果load时候的变量值为1 想要赋值给model为2 可不可以通过rule进行设置

楼主可打开页面的 HTML 看看页面底部下面的脚本验证,你就能明白 rules 的验证规则是在何时进行的验证
至于重新赋值或者其他动作验证楼主可参见 http://www.yiichina.com/doc/guide/2.0/input-validation#standalone-validators
默认情况下,是所有场景都走的,你可以设置不同的场景,这个是注释上说的。
之前看错题目了木好意思。。。

登录

找回密码

注册