ECCUBE4で、例えば商品画像のURLを取得する場合、デザインテンプレート(twig)上では以下のように指定します
{{ asset('hogehoge.png', 'save_image') }} // 出力結果 /html/upload/save_image/hogehoge.png
asset関数に個別のファイル名を渡せば’save_image’までのパスも付け足して返してくれるわけですね
これと同じことをContoller上でしたい!
たったこれだけのことにだいぶ調べるハメとなりました
ECCUBE3では image_save_urlpath というのが定義されているので
$app['config']['image_save_urlpath'].'/hogehoge.png'
とでもするだけの話だったのですが、4では探せども探せどもimage_save_urlpathに該当するものが見つからない…
eccube_save_image_dir というものはありましたが、そのurlpath版は無いようなのです
※ この場合、dirのほうはサーバOS上でのファイルのパス、urlpathはWEB上でのドキュメントルートからのパスを指します
結論としては以下のようにして’save_image’まで込みでファイルパスを取得できます
use Eccube\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Asset\Packages; class HogeController extends AbstractController { /** * @var Packages */ protected $packages; /** * HogeController constructor. * * @param Packages $packages */ public function __construct( Packages $packages ) { $this->packages = $packages; } public function index(Request $request) { $filepath = $this->packages->getUrl('hogehoge.png', 'save_image'); .... } }
Symfony\Component\Asset\Packages のgetUrlで、twigのassetでやっているのと同じ処理ができました
やり方が分かってしまえば、configからパスを取り出すECCUBE3流より、ECCUBE4流の書き方がスマートに見えますね