Symfonyのファイルアップロードで便利なサービスと言えばVichUploaderBundle
ですよね。
そんなVichUploaderBndleを使っている状況でog:image
の設定でハマってしまいました。
vich_uploader_assetはpathしか表示されない
Twigで画像のパスを取得するときvich_uploader_asset
を使うと思います。
でassert
の実装を見ると一見URIが返ってくるかのように錯覚してしまいます。
|
|
こりゃ勘違いするでしょ。
resolveUri
ってURIを取得できるように思ってしまいますよね。
まあコメントみるとpathが返ってくると書いてありますが・・・w
|
|
どうやってtwigで画像のURIを表示するのか?
og:image
で画像を指定するときは当たり前ですが、pathではなくてuriを表示しなきゃいけないですよね。
方法としては2つあると思います。
- vich_uploader_assetの代わりのtwig関数を自作する
- twigのテンプレートの中で他の関数と組み合わせて何とかする
vich_uploader_assetの代わりのtwig関数を自作する
requestがscopeの制約があって、直接Injectできないとかあってめんどくさいんですが一応こんな感じに実装すれば、uri表示するTwig関数が作れます。
ちょっとめんどくさいですね。。
twigの他の関数と組み合わせて何とかする
Twigの関数用意するのとかだるいって人は、実はtwigの中で同じようなことが出来てしまいます。
|
|
たったこれだけで出来てしまいます。 どちらが良いかは、そのチームやプロジェクトによるのではないでしょうか?
getUriForPathについて
結局両方のやり方もrequestオブジェクトのgetUriForPath
を利用しているだけです。
getUirForPathの実装はすごく簡単なものです。
Request.php
最後に
ちょっとコードを読めばSymfonyの様々なことを理解出来ると思います。
特にRequest,Responseオブジェクトあたりはアプリケーションを実装するうえでよく使うクラスになります。
ぜひ一度コーヒー片手におしゃれな感じでコードを読んでみてはいかがでしょうか?
それからVichUploaderBundleの基本的な使い方に関してはVichUploaderBundleを使ってみた に詳しく載っているのでそちらを参考にするとすぐに使えるようになると思います。