2015-09-20 22:12:32 3638次浏览 2条回答 0 悬赏 10 金钱

现在情况是,我点了一下a 链接,actionTripDays 方法执行了三遍,表里被插入了三条数据,应该只执行一次,插入一条数据的,这是为毛呢??求帮助

<a href="<?= Url::toRoute(['trip-days', 'id' => $logId, 'position' => 'end']) ?>" class="add-one-day" data-method="post" rel="nofollow">+ 新增后一天</a>


public function actionTripDays($id)
{
    $model = $this->findModel($id);

    // 最开始是这样写的,执行了两遍
    if (!empty($position = Yii::$app->request->get('position', '')))
 
    // 变成下面这样干脆执行了三遍
    if (Yii::$app->request->getIsPost() && !empty($position = Yii::$app->request->get('position', ''))) {
        // dump(Yii::$app->request->get('position', ''));
        // exit;
        TravelDay::addDay($position, $model->id);
    } else {
        TravelDay::initDay($model->id);
    }


    $days = TravelDay::find()
                ->where(['travel_log_id' => $model->id])
                ->orderBy(['order' => SORT_ASC])
                ->all();

    $images = TravelImg::find()
            ->where(['travel_log_id' => $model->id])
            ->orderBy(['order' => SORT_ASC])
            ->all();


    return $this->render('trip-days', [
            'images' => $images,
            'days' => $days,
            'logId' => $model->id,
        ]);
}
  • 回答于 2015-09-20 22:29 举报

    没看出问题所在,你得再跟踪下问题在哪。
    看是链接被提交了3次,还是这个页面调用了3次add,还是add方法中存了3次数据库。

    3 条回复
    回复于 2015-09-20 22:51 回复

    我只点了一下链接,最开始没有加 isPost 判断执行了两遍,加了后才执行了三遍,add中确定只插入了一次数据

    回复于 2015-09-20 23:28 回复

    if里的dump调试信息会输出几次?

    回复于 2015-09-21 08:28 回复

    输出了一次

  • 回答于 2015-09-21 09:34 举报

    a连接可以重复提交,这是真的,你应该用一个js去控制他,点击一次就隐藏那个a

    1 条回复
    回复于 2015-09-21 14:23 回复

    搞了半天没找到为什么,我直接换成 ajax 提交了,成功后再 location.reload()

您需要登录后才可以回答。登录 | 立即注册
zifeiyu
副总裁

zifeiyu 陕西西安

注册时间:2015-07-03
最后登录:2017-09-19
在线时长:51小时39分
  • 粉丝11
  • 金钱7570
  • 威望50
  • 积分8580

热门问题