2017-04-16 1 views
0

FOSUser Bundleを使用して登録した後で、デフォルトのプロフィール画像を追加しようとしています。しかし、私は__constructにこの種のファイルを追加する方法を知らないので、イメージマッピングされたエンティティが必要です。ここで__construct()内の画像タイプファイル

は私のUserエンティティである:

<?php 
// src/AppBundle/Entity/User.php 

namespace AppBundle\Entity; 

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string") 
    * 
    * @Assert\NotBlank(message="L'image doit être au format jpg") 
    * @Assert\File(maxSize = "100k",mimeTypes={ "image/jpg" }) 
    */ 
    private $image; 

    public function getImage() 
    { 
     return $this->image; 
    } 

    public function setImage($image) 
    { 
     $this->image = $image; 

     return $this; 
    } 

    public function __construct() 
    { 
     parent::__construct(); 
     // your own logic 
     $this->image = 'http://lorempixel.com/300/300/'; 
    } 
} 

私は適応しようとした:https://symfony.com/doc/current/controller/upload_file.html

+0

質問は表示されません。あなたが持っている問題を説明してください。デフォルトのイメージはデータベースに残っていないか、または表示されませんか?問題を特定しようとしましたか?出力またはログにエラーメッセージがありますか? – dbrumann

答えて

0

次の行 "の$ this - >画像= 'http://lorempixel.com/300/300/を';" 画像フィールドに文字列を置き、バリデーターが "@Assert \ File(...)"でそのフィールドを検証しようとすると、ファイルの代わりに文字列が見つかったため失敗します。

あなたがする必要があるのは、ファイルタイプをそのフィールドに入れることですこのように:

use Symfony\Component\HttpFoundatio\File\UploadedFile; 

class User extends BaseUser 
..... 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->image = new UploadedFile("http://lorempixel.com/300/300/", "defaultImg"); 
    } 
} 

最初のパラメータはにUploadedFileクラスのsymfonyのAPIリファレンスをチェックし、第二は、そのファイルの名前で、あなたのファイルへのパスです: http://api.symfony.com/2.3/Symfony/Component/HttpFoundation/File/UploadedFile.html

私はあなたが@assert \イメージを使用することをreccomand @Assert \ File制約の代わりに@Assert \ File制約を指定すると、ここで説明されています。http://symfony.com/doc/current/reference/constraints/Image.html

+0

あなたの答えは助けになりましたが、今私は新しいエラーが発生しています:>ファイル "http://lorempixel.com/300/300/"は存在しません 500内部サーバーエラー - FileNotFoundException – Maxime

+0

見つからない、問題はあなたのリンクです、私はクロムでリンクを開こうとしましたが、404が見つかりませんでした。有効なリンクを使用してみるか、サーバー上で必要なイメージをダウンロードし、Webフォルダに入れ、 PHPのマジック定数__DIR__とあなたの道を../ ..と一緒に働かせます。 – paris93

+0

私はDIR定数を持つパスを使って動作させました!不幸にも、私はエラーが発生します:「ファイルをアップロードできませんでした」私は私の登録フォームを検証しようとした後。私はファイルをアップロードするフィールドを持っていないが、私は私が私のコンストラクタを呼び出すときに私のデフォルトの画像を使用したいので、私は1つを追加するはずです – Maxime