0

カスタムファイル名で VichUploaderBundle をセットアップしましたが、正常に動作します..

関連する config.yml:

vich_uploader:
    db_driver: orm

    mappings:
        product_image:
            uri_prefix: '/uploads/products'
            upload_destination: '%kernel.root_dir%/../web/uploads/products'

            namer: namer.product_image
            #namer: vich_uploader.namer_uniqid
            #namer: vich_uploader.namer_origname
            #namer: vich_uploader.namer_property

            inject_on_load:     false
            delete_on_update:   true
            delete_on_remove:   true

私のカスタム名:

public function name($obj, PropertyMapping $mapping)
{
    $file = $mapping->getFile($obj);

    $new_name = $this->generateRandomSecret();

    if ($extension = $file->guessExtension())
    {
        $new_name = $new_name .'.'. $extension;
    }

    return $new_name;
}

ただし、カスタム パスを使用してファイルをアップロードしたいと考えています。

必要なアップロード パスをコントローラーのセッション変数 "upload_files_path" に保存し、そのパスを名前で取得します。

データベース(id、image_name、udated_at)に保存しますが、ファイルをファイルシステムに書き込みません!

私が電話するとき

<img src="{{ vich_uploader_asset(product, 'imageFile') }}" />

テンプレートでは、先頭に「/」を付けたファイル パスを返します。私はそれを機能させる方法を理解できません。

カスタムファイルパスの構成は次のとおりです。「uri_prefix」と「upload_destination」を編集して空白にしました。編集されたconfig.yml

vich_uploader:
    db_driver: orm

    mappings:
        product_image:
            uri_prefix: ''
            upload_destination: ''

            namer: namer.product_image

            inject_on_load:     false
            delete_on_update:   true
            delete_on_remove:   true

私の更新されたカスタム名: ここでは、アップロード パスと新しいファイル名を連結します。

public function name($obj, PropertyMapping $mapping)
{
    $file = $mapping->getFile($obj);

    $new_name = $this->generateRandomSecret();

    if ($extension = $file->guessExtension())
    {
        $new_name = $new_name .'.'. $extension;
    }

    $upload_path = $this->container->get('session')->get('upload_files_path');

    $full_path = $upload_path . $new_name;
    return $full_path;
}

あなたの時間と知識をありがとう。

4

1 に答える 1