2016-08-19 5 views
3

私は複数のファイルをアップロードしてその場所を保存しようとしています。新しいファイル名を設定するには、symfonyのマニュアルhttp://symfony.com/doc/current/controller/upload_file.htmlに記載されているguessExtension()メソッドを使用してみました。何らかの理由でこのメソッドとmove()メソッドが認識されません。これで何が起こっているのですか?私はSymfonyのFileクラスとUploadedFileクラスを含めてみましたが、それは問題を解決しませんでした。Symfony 3メソッド 'guessExtension()'と 'move()'が見つかりません

AutoController.php

 if($form->isValid() && $form->isSubmitted()) 
    { 
     $powerType = $form['power_type']->getData(); 

     if($powerType == 'kw') 
     { 
      $auto->setPowerKw($form['powerKw']->getData()); 
      $auto->setPowerHp(ceil($form['powerKw']->getData() * 1.34)); 
     } 
     else if($powerType == 'ag') 
     { 
      $auto->setPowerKw(ceil($form['powerKw']->getData() * 0.746)); 
      $auto->setPowerHp($form['powerKw']->getData()); 
     } 

     // PLACEHOLDER 
     $auto->setActive(true); 
     // PLACEHOLDER 

     // File uploading 
     $files = $auto->getImages(); 
     $images = array(); 

     foreach($files as $file) 
     { 
      $fileName = md5(uniqid()).'.'.$file->guessExtension(); 

      $file->move(
       $this->getParameter('carAdds_directory'), 
       $fileName 
      ); 
      $images[$fileName] = $fileName; 
     } 

     $auto->setImages($images); 

     $em = $this->getDoctrine()->getManager(); 
     $em->persist($auto); 
     $em->flush(); 

     return $this->render('@Auto/auto/index.html.twig'); 
    } 

Entityクラス

/** 
* @var array 
* 
* @Assert\Image(
*  mimeTypes = { 
* "image/png", 
* "image/pjpeg", 
* "image/jpeg", 
* "image/gif" 
* }, 
*  mimeTypesMessage="Failas yra netinkamo formato", 
*  maxSize = "10M", 
*  maxSizeMessage="Failas yra per didelis" 
*) 
* @ORM\Column(name="images", type="array") 
*/ 
private $images; /** 
* Set images 
* 
* @param array $images 
* 
* @return Auto 
*/ 
public function setImages($images) 
{ 
    $this->images = $images; 

    return $this; 
} 

/** 
* Get images 
* 
* @return array 
*/ 
public function getImages() 
{ 
    return $this->images; 
} 

にformTypeクラス

  $builder->add('images', FileType::class, array(
      'label' => false, 
      'label_attr' => array('class' => $label_offset), 
      'required' => false, 
      'attr' => array(
       'class' => $styles, 
       'multiple' => 'multiple')))... 

* EDIT さて、それはこれだけでPHPの嵐がメソッドを認識していなかったように思えるん私はコンパイルエラーがないので、イメージは存在しないのでアップロードされました。 Here's what my database field look like after form submission is complete.

config.yml

carAdds_directory: '%kernel.root_dir%/web/uploads/carAdds' 

PHPの嵐はに行く宣言を見つけることができませんと言います。これが私のファイルがアップロードされていないように見えることがありますか?そうであれば、私はどのようにしてパスを適切に指定しますか?

答えて

1

実際にコードを実行しているときにエラーが表示されているのですか、それともSymfonyのオートコンプリートですか?それは、後者の場合:

/** @var File $file */ 
foreach($files as $file) 
    { 
... 

は(あなたが実際に入力することができます/ **とPHPStormが残りを自動補完されます)トリックを行う必要があります。

+0

それだけで自動補完だったが判明、しかし画像はフォーム送信後の任意の場所にアップロードされていないようです。 –

0

エディタで警告が表示されても無視されますが、それでも機能します。

PhpStormは、メソッドが存在する間、何とかそのメソッドを見つけることができません。

+0

ええ、コードを実行するときにエラーが発生していないので、PhpStormだけだったようですが、画像はどこにもアップロードされていないようです。 –

+0

それについて、私はアップロードの完全な投稿をした、それを読んで、あなたが何かを把握するのに役立つかもしれない。 ;)http://stackoverflow.com/a/38945180/6711360 – Preciel

+0

ありがとう、します。 –

0

さて、それは代わりのように私のアップロードディレクトリを指定することが判明したファイルに関するPrecielのポストhttps://stackoverflow.com/a/38945180/6711360のおかげでアップロードして:

carAdds_directory: '%kernel.root_dir%/web/uploads/carAdds' 

私はしかし、この本

carAdds_directory: '%kernel.root_dir%/../web/uploads/carAdds' 

ようにそれを指定する必要がありましたエンティティクラスの$ imagesパラメータが文字列に設定されている場合にのみ動作しますが、複数の画像を同時にアップロードしたいので、$ images型を配列に設定すると、毎回空の配列が得られます。フォーム提出が完了した後の私のデータベースフィールドの外観は次のとおりです。

Here's what my database field look like after form submission is complete.

関連する問題