0

Zendフォームクラスを使用して画像をアップロードしようとしていますが、現在の入力フィルターはこれです

$inputFilter->add([
        "name"                                           => "ImageLogo",
        "required"                                       => false,
        "validators"                                     => [
            [
                "name"                                   => "FileMimeType",
                "options"                                => [
                    "mimeType"                           => [ "image/jpeg", "image/png" ],
                ],
            ],
            [
                "name"                                   => "FileIsImage",
            ],
        ],
        "filters"                                        => [
            [
                "name"                                   => "FileRenameUpload",
                "options"                                => [
                    "target"                             => getcwd() . "/public/uploads/logos",
                    "useUploadName"                      => true,
                    "useUploadExtension"                 => true,
                    "overwrite"                          => true,
                    "randomize"                          => true,
                ],
            ],
        ],
    ]);

それは完全にアップロードされますが、修正できなかった部分がいくつかあります。

$entityまず、アップロードする前に の Id を付加したいと思います。のようなもの$entity->getId() . $fileName(混乱: 新しいエンティティを追加するとどうなるか。ID はありません)

第二に、フォームを検証した後、コントローラーでファイル名を取得するにはどうすればよいですか。これ

if ($form->isValid()) {
 print_r($form->getData());exit();
}

旧姓を表示します。

4

1 に答える 1

0

同様のアプリケーションがあります。それが助けになるなら、これが私がやった方法です。

  • あなたが言ったように、エンティティIDは作成が完了するまで不確実なままであるため、アップロードする前に追加していません。
  • 最初にアップロードして、サーバーで画像名を取得します。
  • tmp_name を使用して db にレコードを作成します。

    // If form is submitted
    if ($this->getRequest()->isPost()) {
    
        // Merge form data and file data
        $data = array_merge_recursive(
            $this->getRequest()->getPost()->toArray(),
            $this->getRequest()->getFiles()->toArray()
        );
    
        // Filter and verify form data
        $form->setData($data);
    
        // If form is valid
        if ($form->isValid()) {
            $data = $form->getData();
            $fileNameOnServer = basename($data['ImageLogo']['tmp_name']);
    
            // entity repository manages saving into database and return new id
            $newEntityId = $this->_entityRepository->create($data);
    
            // Here we know the entity ID and the file name on server
        } else {
            // Do something if form is not valid
        }
    }
    
    // Do something if form is not submitted (e.g. display form)
    

これで、エンティティ ID とファイル名がわかりました。DB のファイル名は変更しませんが (アプリはサーバーのランダムな名前で問題ありません)、必要に応じてここからすべての情報を入手できます。

于 2019-03-01T18:14:59.703 に答える