当前位置: 首页 > 知识库问答 >
问题:

Yii2-数据已删除

诸葛柏
2023-03-14

我正在运行一个Yii2应用程序。今天我遇到了一个问题,至少有250个条目的整个表都是空的。该表由文件信息条目(原始文件名、新文件名)组成。因此,每个条目在逻辑上都链接到文件系统中的一个文件。我检查了文件系统的文件,发现文件也被删除了。因此,我得出结论,数据在yii2应用程序中被删除。我有一个操作将被调用(POST)来删除一个条目。

我为它做了一种通用函数:

public function actionDelete($id, $className)
{
    $this->findModel($id, $className)->delete();       
    return $this->redirect(Yii::$app->request->referrer);
}

在视图中,我有一个带有操作列的文件附件列表。每个action列都有这样的方法调用:

echo TagHelper::deleteButton($attachment, Yii::t('app', 'Deleting a File'));

其中,$attachment是模型。

deleteButton看起来像这样:

public static function deleteButton($model, $text, $view = null, $controller = 'delete/delete-check') {
    return Html::a('<span class="glyphicon glyphicon-trash"></span>', FALSE, ['value' => Url::to([$controller, 'id' => $model->id, 'className' => get_class($model), 'view' => $view]),
                'role' => 'button', 'title' => $text,
                'class' => 'showModalButton btn-link'
    ]);
}

这将打开一个模式窗口,其中的视图delete/delete check打开一个模式窗口,如下所示:

<div class="delete-check">

    <?php $form = ActiveForm::begin(['id' => 'delete-check-form', 
        'method' => 'post', 
        'action'=>['delete', 'id' => $model->id, 'className' => get_class($model)]
    ]); ?>  

    <?php if ($model->deleteable()): ?>
        <p><?= Yii::t('app', 'You are going to delete the following entry:') ?></p>
        <div class="well well-sm"><?= $model ?></div>
        <p><?= Yii::t('app', "In the system there aren't any references to this entry found. Deleting this entry won't lead to any problems." ) ?></p>
        <p><?= Yii::t('app', "Deleting this entry is <mark>definitive</mark> and can't be undone." ) ?></p>

        <div class="form-group text-right">
            <?= Html::submitButton(Yii::t('app', 'Delete'), ['class' => 'btn btn-warning']) ?>
        </div>

    <?php else: ?>
        <p><?= Yii::t('app', "You can't delete the entry:") ?> </p>
        <div class="well well-sm"><?= $model ?></div>
        <p><?= Yii::t('app', "There are the following references found in the system:" ) ?></p>

            <?php echo $this->render('/' . $view . '/_reference.php', ['model' => $model]); ?>

        <div class="form-group text-right">           
          <?= Html::button(Yii::t('app', 'Ok'), ['data-dismiss' => 'modal', 'class' => 'btn btn-info']); ?>
        </div>
    <?php endif; ?>

    <?php ActiveForm::end(); ?>
</div>

这就是问题所在吗?

应用程序本身管理着40多个用户。他们为自己的帐户输入不同的数据。因此,从该表中删除250多个条目是不可能的,因为用户甚至看不到这些条目。他只看到自己的作品。

所以我的问题是,是否有可能在不规则的情况下调用删除操作?

我真的被困在这里了,因为我不知道从哪里开始调查。一些线索?

谢谢,吕克

编辑:

以及findModel功能:

protected function findModel($id, $className)
{
    if (($model = $className::findModel($id)) !== null) {
        return $model;
    } else {
        throw new NotFoundHttpException('The requested page does not exist.');
    }
}

$attachment模型的$className::findModel()方法的实际调用:

public static function findModel($id)
{
    if (($model = EnsembleProposalHealthAttachment::findOne($id)) !== null) {
       if (Yii::$app->user->can("admin") || Yii::$app->user->id == $model->ensembleProposal->ensemble->theater->user_id) {
            return $model;
        } else {
            throw new ForbiddenHttpException(Yii::t('app', 'You are not allowed to perform this action.'));
        }
    } else {
        throw new NotFoundHttpException('The requested page does not exist.');
    }
}

Edit2:我查看了yii2日志文件,发现了一些有趣的异常(来自不同的模型,具有相同的删除逻辑),这些异常可能属于该问题。

2017-10-09[][][][error][yii\web\HttpException:404] yii\web\NotFoundHttpException: The requested page does not exist. in models/EnsembleProposalProductionAttachment.php:93
Stack trace:
#0 controllers/DeleteController.php(73): app\models\EnsembleProposalProductionAttachment::findModel('168')
#1 controllers/DeleteController.php(66): app\controllers\DeleteController->findModel('168', 'app\\models\\Ense...')
#2 [internal function]: app\controllers\DeleteController->actionDelete('168', 'app\\models\\Ense...')

我仍然无法想象这个错误是如何抛出的,因为从前端用错误的id调用findModel是不可能的。

也许这句话有点不对劲:

return $this->redirect(Yii::$app->request->referrer);

不知何故,推荐人持有不正确的值?

共有1个答案

干宏邈
2023-03-14

始终与备份一起工作!在这种情况下,你就输了

 类似资料:
  • 我在我的react本地应用程序中使用Firebase实时数据库。大多数事情都是通过REST API云函数来完成的。app中很少东西直接使用实时数据库。最近,我发现我数据库中的所有数据都被莫名其妙地删除了。甚至数据库中不再使用且未在我的应用程序/云功能的源代码中引用的部分也消失了。 问题发生在两个项目及其数据库(生产/测试)中。我必须使用备份来恢复它们,但即使没有人使用应用程序(例如,在测试环境中)

  • 问题内容: 我想使用Yii2和redis作为数据库。 到目前为止,我从这里获得了Yii2的Redis ActiveRecord类。 链接1 链接2 但是,我遇到了问题。为什么该类在REDIS中添加为哈希? 除此之外,我找不到插入数据的模式。我添加了一个用户,它将在名称空间下添加一个用户,并在其下添加另一条记录,依此类推,但是主题都没有我在属性中定义的任何字段!仅包含ID。 我知道键值类型数据库和R

  • 我正在EclipseIDE中用Yii2开发一个项目。我无意中删除了vendor/yiisoft下的Yii2文件夹。但我的应用程序仍然像charme一样工作,它不会抛出任何异常。我使用Composer安装http://www.yiiframework.com/extension/yii2-improved-basic-template/.文件供应商/composer/autoload_psr4。ph

  • 本文向大家介绍YII2数据库查询实践,包括了YII2数据库查询实践的使用技巧和注意事项,需要的朋友参考一下 初探yii2框架,对增删改查,关联查询等数据库基本操作的简单实践。 数据库配置。 /config/db.php 进行数据库配置 实践过程中有个test库-》test表-》两条记录如下 sql 查询方式 yii2 提供了原始的数据库查询方式findBySql;同时, 通过占位符的方式,自动进行

  • 我已经标记了数据(标签和文本),如下所示: 我尝试用OpenNLP库训练我Java分类模型。

  • 概述 使用remove()方法从集合中删除文档。这个方法需要一个条件文档用来决定哪些文档将被删除。 删除匹配的所有文档 下面的操作将删除指定条件匹配的所有文件: db.restaurants.remove( { "borough": "Manhattan" } ) 删除操作返回一个WriteResult对象,它包含了操作的状态信息。nRemoved字段值表示被删除的文档数量。 使用justOne可