谁一开始就是大神?

PHP 第98页

PHP

YII2接收序列化的数组[2.0]

lovelyyak阅读(83)

下面的是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

我来了,正如我轻轻的来,不带走一片云彩。
$model->load(Yii::$app->request->post()) && $model->save()
这么写直接就是将post的值直接就存入了数据库,说好的$model->validate();进行安全过滤呢?
虽然在save前会自动进行参数合法性过滤的。
对于rules规则自动过滤法则还没研究透,但有一个场景是肯定的,那就是对要存储的值设定个默认值,比如会员的开启状态,在会员注册场景的时候在rules规则里面进行某字段比如 status,将其设定为1。这个在rules规则里面设定毫无疑问。
就楼主的需求来看,个人感觉是,完全可以写在控制器里面了。
看完了另外一个问题才看到该问题,就顺便回答了。
希望解决你的问题!
我是鬼鬼,鬼一浪人是也!20150612
虽然我不会但是我来看一下
重写afterValidate()方法应该可以做到
这样也可以。
save() 方法保存之前,你先用一个分隔符号拆分 images 属性不就好了吗?
model里的beforeSave($insert)用过么?骚年
个人对于这种数据的分割合并处理,都是卸载beforeSave里头的。不在action里头处理这些。
好高深的样子,涨姿势了
都说这么高深,那还让小白怎么活,帖出来beforeSave 如何解决的
版主,你这个问题怎么解决的哈,遇到跟你类似的问题了,求指点

组件中的JS引用问题[2.0]

CandyLion阅读(76)

1、做为一个组件怎么让JS显示到VIEW里
2、怎么让JS只显示一次在VIEW里
提供示例代码是最好 。

使用 asset 类进行管理 js 文件

yii2进行页面跳转的时候带点提示信息

Noblequeen阅读(85)

yii2 redirect进行页面跳转的时候, 可以像页面传递数据?比如下面的代码

return $this->redirect(['member/security']);

我一般是操作数据库后进行跳转,到底操作成功否? 我想带个提示信息给页面,让页面显示一下然后提示信息就没了?
该怎么办?
我现在的做法是将提示信息存放到session中,然后跳转后用了一次就删掉! yii2中有更好的办法?

使用yii的flash数据,其实他也是session,哇哈哈哈哈!
为了保留一个完整的request-response流程,建议还是使用return response对象的方法。不过还有一种折中的办法就是封装一个显示信息的中间页,把你要显示的信息和url传过去,等显示完信息后,再跳转到目标地址。
不过我还是建议使用flash数据的方法。
return $this->redirect(['member/security', 'id' => 1]); 这样不行吗?
高级模板下可以直接使用这个:
基础模板我没用过,不知道它那里有没有高级模板下 frontend/widgets/Alert.php 这个小插件,有的话也是可以用的。
$this->redirect( Yii::$app->getUrlManager()->createUrl(‘url’));
综合@shiyang和@nomeore两位大大的答案完成了需要的效果,感谢
return $this->success([‘/admin/index’]);

关联表的删除报错捕获[1.0]

Fionaqueen阅读(85)

我有a表和b表,他们有关联关系,b表是a表的外表,当我删除b中的内容时,会报代码级别的错误,那我怎样通过异常抛出来捕获异常,而不是报代码级别的错误?

以下是代码:

public function actionRequirementDelete($id,$page)
{
    $page = $page + 1;
    $requirement_data = Requirement::model()->findByPk($id);
    
    $transaction = $requirement_data->dbConnection->beginTransaction();
    try{
        if($requirement_data->delete()){
            $this->redirect(array('/user/employer','page'=>$page));
        }else{
            throw new Exception("订单删除失败");
        }
        $transaction->commit();
    }catch (Exception $e){
        $transaction->rollback();
        echo $e->getMessage();
    }
}

你的这个需求,其实有好几种解决方式:
1.是否一定需要报错?是否可以考虑在数据库里设置一下外键删除时的动作,比如CASCADE ?
2.如果按你说的,你需要删除时判断是否有从属数据,那么你应该先判断从属数据是否存在,而不是通过异常去处理,因为异常出现的可能性很多,不一定是因为存在从属数据导致。
3.我看到了你的异常捕获,
这种形式是正确的,但是你的思路错误,你认为delete()返回非true值时应该抛出一个异常,但是事实上delete()方法在删除报错时,内部已经先一步抛出了异常,也就是说,你的throw new Exception("订单删除失败");应该是不会触发的。
心有余而力不足,唉,不会
自定义一个exception 比如UserException 或者OrderException等等,然后只捕获这个异常 ,其他的异常让系统处理去吧
php的错误和异常不是一个统一的概念,php有的错误是无法捕获的,比如致命错误和编译错误等,如果抛出的是这两种错误,你没办法。如果抛出的是警告、提醒等,好像通过设置是可以通过CException捕获的。
可以先做unlinkAll,把有外键依赖的关系表中的数据先删除,类似
可不可以关联修改?

怎样把markdown编辑器像舰长一样应用到页面中?[2.0]

coolKeo阅读(87)

试了很多,都没成功,谁有实例或者有过部署 markdown 经验,不胜感激啊。成功让我的页面部署上 markdown 编辑器,888分抱回家~~~

我用的是这个编辑器。
GitHub地址:http://github.com/toopay/bootstrap-markdown
DEMO演示:http://www.codingdrama.com/bootstrap-markdown/
拿去用吧,把分给我留下!
Bootstrap-Marokdown
任性了哈…
下次问个一次性花完钱的问题
我就是需要这个

Yii2权限管理,我写在了beforeAction里,但输出json时就出错了[2.0]

NiceKeo阅读(80)

我写了个CommonController,其他Controller都继承这个类。
我在CommonController里写了输出JSON的方法

public function renderJson($params = array()) {
    Yii::$app->response->format = Response::FORMAT_JSON;
    return $params;
}

在CommonController的beforeAction写了验证

$isAjax = Yii::$app->request->getIsAjax();
//未登录
if (\Yii::$app->user->isGuest) {
    if ($isAjax) {
        return $this->renderJson(array(
            'status' => -1,
            'message' => '请先登录',
            'url' => Yii::$app->getHomeUrl()
        ));
    } else {
        return $this->goHome();
    }
}else{
    return parent::beforeAction($action);
}

这样,如果不是ajax请求就没问题,会跳到登录 ,但是如果是ajax请求。就会出错

PHP Notice 'yii\base\ErrorException' with message 'Trying to get property of non-object' 

求解答

beforeAction返回的应该是true或者false,要直接输出的话,应该还是返回false,通过response指定输出的内容,类似这样
试试将Response::FORMAT_JSON换成'json',如果OK的话,说明CommonController没有这条语句:use yii\web\Response;

写出这样的POST[2.0]

littleslim阅读(83)

$_POST['images'] = serialize($_POST['images']);

怎么写出这个在YII2里。用YII2的方法。

研究了一下,目前有了具体答案了
Yii::$app->request->post();
以上这一句的作用是判断是否是通过post提交,且可以给提交的name设定一个默认值,比如:
Yii::$app->request->post('name','user_name');
我有发现当第二个参数不设定的时候返回的就是null,没啥用途。
真正让数据进入model层的在于 Model 下面的load()方法,载入的是提交后的值如下代码:
以上就是获取提交数据的简单粗暴的方法。到这里依然还没进入主题。
根据楼主的需求是,要对提交的值进行再次操作,也就是在入库前做些序列化也好或者是对数据进行进一步处理的好。怎么做呢?
从追踪代码来看,绕了好大的一个圈子,最后回到了Model层上,这个类中的某些方法完全可以完成我们的需求,请看代码:
总结:主要的核心症结在于,post过来后的数据,接下来的工作是由model层来完成的。就不要继续玩$_POST了。
希望可以帮到你!
如果大家觉得还有其他的比较方便的方式,还望告知!
我是鬼鬼,鬼一浪人是也!201150612
$_POST['images']是什么类型的数据?为什么要序列化?
Yii::$app->request->post();//$_POST

登录

找回密码

注册