1

PHP でのデータ マッパー/モデルの実装について話し、例を示しているブログ投稿やフォーラム トピックをたくさん見たり読んだりしましたが、ファイル/画像の保存も扱っているものは見たことがありません。

私は現在、Zend Framework ベースのプロジェクトに取り組んでおり、モデル (ファイル パスが渡されている) でいくつかの画像操作を行っています。その後、そのファイルを適切な場所に保存するためにマッパーに任せています。 - これは一般的な慣習ですか?

しかし、渡された画像から 3 つの異なるサイズの画像を作成するにはどうすればよいでしょうか。現時点setImage($path_to_tmp_name)では、画像の種類をチェックし、サイズを変更してから元のファイル名に保存します。getImagePath()then を呼び出すと、データ マッパーが使用できる現在のファイル パスが返さsetImagePath($path)れ、適切な場所 ("/content/my_images" など) に保存されると、 への呼び出しで変更されます。これはあなたにとって実用的ですか?

また、その画像への URL を取得するにはどうすればよいでしょうか。それはモデルが提供すべきものだと思いますか? そのモデルは、画像がどこに保存されているか、最終的にはブラウザを介してどのようにアクセスされるかを心配する必要があるように思われるので、それをiniファイルに入れ、URLプレフィックスをコントローラ。それは合理的に聞こえますか?

私は画像操作に GD を使用していますが、それは関係ありません。

更新:モデルで画像のサイズ変更を行う必要があるかどうか疑問に思っていました。モデルでは、特定のサイズの「メイン」画像と「サム」画像を提供する必要がある場合があります。必要なサイズを定義するものを返すモデルに関数を作成することを考えましたgetImageSpecs()。その後、別の画像操作クラスがサイズ変更を実行し、(おそらくコントローラーで?)最終的なパスをモデルに渡すだけです。のようなものを使用しますsetImagePaths($images)

どんな考えでも大歓迎です:)

4

1 に答える 1

0

最初に、マッパーにファイルへのパスを保存させるのが一般的な方法であることをお伝えします。これはまさにサービスレイヤー(あなたの場合はマッパー)が行うべきことです。あなたの場合の最善の方法は、生成された各ファイルのパスを作成することです。私はすることをお勧めします:

$path = '/path/to/root/' . substr(chunk_split(md5(<unique id for file>), 2, '/'), 0, 5);

上記を実行すると、パスは /path/to/root/ab/23/ のようになります。画像ごとに異なるサイズが必要なため、各画像を id の名前とそれに続くサイズで保存します。元:

$fileName = <uniquie file id from above> . '_50_100' . $ext;

最後に行う必要があるのは、パスをデータベースに保存することだけです。モデルは、サービス層からパスを取得して、必要な URL を構築できます。

于 2010-04-05T14:30:42.290 に答える