doctrine 2.1(およびzendフレームワーク1.11、この問題では重要ではありません)を使用して、dbへの再保存を含むpostpersistおよびpostupdateアクションを実行するにはどうすればよいですか?
たとえば、生成されたばかりの主キーのIDに基づいて一意のトークンを作成したり、アップロードされた画像のサムネイルを生成したりします(実際には、データベースに再保存する必要はありませんが、それでも)?
編集-説明しましょう、私たちはしませんか?
上記は実際には2つのシナリオに関する質問です。どちらのシナリオも、次の状態に関連しています。
User
私が実体を持っているとしましょう。永続化のマークが付けられた後にオブジェクトがフラッシュされると、通常の自動生成されたmysqlのID(通常は1、2、3などで始まる実行番号を意味します)があります。
各ユーザーは画像をアップロードできます。彼はアプリケーションで使用できるようになります-データベースにもレコードがあります。だから私はという別のエンティティを持っていますImage
。各Image
エンティティには、自動生成されたIDもあります。これはユーザーIDと同じ方法です。
さて、シナリオは次のとおりです。
ユーザーが画像をアップロードするときに、データベースに保存された直後にその画像のサムネイルを生成したいと思います。これは、新しいイメージまたは更新されたイメージごとに発生するはずです。
スマートを維持しようとしているので、サムネイルを生成するコードを次のように記述したくありません。$ image = new Image();
...
$ entityManager-> persist($ image);
$ entityManager-> flush();
callToFunctionThatGeneratesThumbnailOnImage($ image);むしろ、
prePersist
またはpreUpdate
メソッドのように、オブジェクトの永続化(永続化されたオブジェクトのフラッシュ)で自動的に発生するようにしたいのです。ユーザーが画像をアップロードしたので、彼はその画像へのリンクを取得します。おそらく次のようになります
http://www.mysite.com/showImage?id=[IMAGEID]
。
これにより、誰でもこのリンクのimageidを変更するだけで、他のユーザーの画像を見ることができます。
そのため、このようなことを防ぐために、画像ごとに一意のトークンを生成したいと思います。それほど洗練されている必要はないので、画像IDのmd5値をソルトとともに使用することを考えました。
ただし、そのためには、そのイメージのIDを取得する必要があります(永続化されたオブジェクトをフラッシュした後にのみ取得します)。次に、md5を生成し、それをデータベースに再度保存します。
画像へのリンクは一般公開されているはずなので、認証されたユーザーに何らかの許可ルールで画像を表示させることはできません。