使用学说 2.1(和 zend 框架 1.11,这对这件事并不重要),我怎样才能进行发布持久化和发布更新操作,这涉及重新保存到数据库?
例如,根据刚刚生成的主键 id 创建唯一令牌,或者为上传的图像生成缩略图(实际上不需要重新保存到数据库,但仍然)?
编辑 - 让我们解释一下,好吗?
以上实际上是关于两种情况的问题。这两种情况都与以下状态有关:
假设我有一个
User
实体。当对象被标记为持久化后被刷新时,它将具有mysql的正常自动生成的ID——这意味着运行数字通常从1、2、3等开始。
每个用户都可以上传一张图片——这他将能够在应用程序中使用——该应用程序也将在数据库中记录。所以我有另一个实体叫做Image
. 每个Image
实体还有一个自动生成的 ID - 与用户 ID 相同的方法。
现在 - 这是场景:
当用户上传图像时,我想在该图像保存到数据库后立即为其生成缩略图。这应该发生在每个新的或更新的图像上。
由于我们试图保持智能,我不希望生成缩略图的代码这样编写:$图像 = 新图像();
...
$entityManager->persist($image);
$entityManager->flush();
callToFunctionThatGeneratesThumbnailOnImage($image);而是我希望它在对象的持久化(嗯,持久化对象的刷新)上自动发生,就像
prePersist
orpreUpdate
方法一样。由于用户上传了一张图片,他得到了一个链接。它可能看起来像:
http://www.mysite.com/showImage?id=[IMAGEID]
.
这允许任何人只需更改此链接中的 imageid,并查看其他用户的图像。
所以为了防止这样的事情发生,我想为每个图像生成一个唯一的令牌。因为它真的不需要很复杂,所以我考虑过使用图像 id 的 md5 值,并加一些盐。
但为此,我需要拥有该图像的 id——我只有在刷新持久对象后才会拥有它——然后生成 md5,然后将其再次保存到数据库中。
了解图像的链接应该是可公开访问的,因此我不能只允许经过身份验证的用户通过某种权限规则查看它们。