2016-12-05 5 views
1

私はDoctrineエンティティFileを持っています。これはディスク上のファイルへの相対パスを知っています(例えばm/d/5/md5.flac)。私はディスクに無駄なファイルがたくさんあることを望んでいないので、ディスクからもファイルを削除したいと思います。Doctrineのライフサイクルコールバックメソッドへの引数を渡します

このため、はDoctrineのライフサイクルコールバックを利用するのが本当に簡単であると判断しました。問題は、多くのオプションの1つとしてconfig.ymlに設定されているファイルへの絶対パスの最初の部分(たとえば、/mnt/storage)がないことです。

どうすればいいですか設定オプションをライフサイクルコールバックに渡すにはどうしたらいいですか?

私が見つけた他の可能性は、通常のドクトリンイベントを使用することですが、それは1つを呼び出すには余計なようですunlink()

+0

通常の[エンティティリスナー](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#entity- listeners)を持つIMHOは、DICに登録されていますコンストラクタ引数の設定を許可する方が良い選択肢です。 –

答えて

1

symfony/doctrine documentationに述べたように:

ライフサイクルコールバックメソッドは引数を受け取りません。ライフサイクルコールバック は、内部で エンティティ内のデータを変換すること(例えば、作成/更新されたフィールドの設定、 がスラッグ値を生成すること)に関連する単純なメソッドである必要があります。

この場合、処理するファイルのパスを設定し、エンティティのコールバックメソッドで処理することをお勧めします。

+0

Symfonyのドキュメントには何があり、Googleはそれを見つけられないのですか?申し訳ありません。とにかく、エンティティのパスに完全なパスを追加することは、将来の悪夢となるでしょう。アップロードパスをAWS E3などの別のサービスに簡単に移動することはできません。この目的のために私は通常の教義の出来事を使うべきだと思いますか?それらはタグ付けされたサービスとして登録されているので、私はDIを使って何か議論することができます。 – Northys

+0

あらかじめ定義された場所を使用してファイルを管理したり、idなどのエンティティの属性に基づいてパスを判断したりすることができます。 –

+0

エンティティは相対パスを知っています。 '' unlink($ this-> getRelativePath()) ''を呼び出して '' a/b/c/abc.jpg''を削除することができます。エンティティは基本パス( ''/mnt/x'')を持っていません。削除する前に基本パスを設定するのは変です(他のオプションは表示されません)。私は** Doctrine Events **は唯一の解決策であると考えています** ** SymfonyのDI **を使用するサービスで** '' upload.basePath% ''をautowireできます。 – Northys

関連する問題