YII2接收序列化的数组 [ 2.0 版本 ]
下面的是POST接收到的数据
Array
(
[_csrf] => MWhSQ3N3M0MGDgsoHz5jdW4mBwhHOUAuWiYHNkAtcRMGIBEFAiFsMw==
[Dynamic] => Array
(
[type] => 1
[title] => 这是标题
[images] => Array
(
[0] => http://f.cloud.com/143401345875600900.jpg
[1] => http://f.cloud.com/143401345242854600.jpg
[2] => http://f.cloud.com/143401345054916700.jpg
[3] => http://f.cloud.com/143401345542255100.jpg
)
[content] => 这是内容
[url] =>
)
)
这个是action的代码
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
images 是 text 类型,需要储存多张图片。
问题是:YII2 有没有自动序列化的功能并且储存到字段
如果没有怎么将序列化后的images赋值给POST
群里的回答:
程涛:
1 是写在rule里
2 写在beforsave
最佳答案
-
我来了,正如我轻轻的来,不带走一片云彩。
public function actionUpdate($id) { $model = $this->findModel($id); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('update', [ 'model' => $model, ]); } }
$model->load(Yii::$app->request->post()) && $model->save()
这么写直接就是将post的值直接就存入了数据库,说好的$model->validate();
进行安全过滤呢?
虽然在save前会自动进行参数合法性过滤的。
对于rules规则自动过滤法则还没研究透,但有一个场景是肯定的,那就是对要存储的值设定个默认值,比如会员的开启状态,在会员注册场景的时候在rules规则里面进行某字段比如 status,将其设定为1。这个在rules规则里面设定毫无疑问。就楼主的需求来看,个人感觉是,完全可以写在控制器里面了。
public function actionUpdate($id) { $model = $this->findModel($id); if ($model->load(Yii::$app->request->post())) { //就这一句完成你需要的效果,序列化images让其重新赋给images,如此方可 $model->setAttribute('images',serialize($model->getAttribute('images'))); if($model->validate() && $model->save()){ return $this->redirect(['view', 'id' => $model->id]); }else{ echo '这里的代码是因为修改代码逻辑而导致的,请妥善处理'; } } else { return $this->render('update', [ 'model' => $model, ]); } }
看完了另外一个问题才看到该问题,就顺便回答了。
希望解决你的问题!
我是鬼鬼,鬼一浪人
是也!20150612胖纸囧 觉得很赞
其他 9 个回答
trylife Beijing
注册时间:2015-03-26
最后登录:2020-12-07
在线时长:51小时55分
最后登录:2020-12-07
在线时长:51小时55分
- 粉丝39
- 金钱1626
- 威望40
- 积分2536