2017-08-02 3 views
-1

私は実際にオブジェクトのフィールドのデフォルト値を設定していましたが、Symfony3を学んでいて、私が追ってきたチュートリアルから学んだ共通の方法でDateTimeオブジェクトをデフォルト値として設定できないことを発見しました次のコード参照)。Symfonyオブジェクトのデフォルト値を設定する最も良い方法は何ですか?

<?php  
namespace UTM\UsersBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* User 
* 
* @ORM\Table(name="utm_users", uniqueConstraints={@ORM\UniqueConstraint(name="uuid", columns={"uuid"}), @ORM\UniqueConstraint(name="username", columns={"username"})}, indexes={@ORM\Index(name="group_id", columns={"group_id"})}) 
* @ORM\Entity 
*/ 
class User 
{ 

    //... 

    private $var = 'value'; 

    //... 

} 

私は解決策を探して、これを可能にするためにコンストラクタを使用できることを知りましたので、次のコードを実行しました。

<?php  
namespace UTM\UsersBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* User 
* 
* @ORM\Table(name="utm_users", uniqueConstraints={@ORM\UniqueConstraint(name="uuid", columns={"uuid"}), @ORM\UniqueConstraint(name="username", columns={"username"})}, indexes={@ORM\Index(name="group_id", columns={"group_id"})}) 
* @ORM\Entity 
*/ 
class User 
{ 

    //... 

    private $var; 

    //... 

    public function __construct() { 
     $this->setVar(new DateTime('0000-00-01 00:00:00')); 
    } 

    //... 

} 

しかし、オブジェクトのデフォルト値を設定するにはどうすればよいでしょうか。 __construct関数のみを使用する方が良いか、これらの2つの方法を組み合わせた方が最良の方法です。

読んでいただきありがとうございます。私は誰かが私にこの質問に対する答えを提供してくれることを願っています。

+0

以上することができますのための注釈を設定することを忘れないでください。ご存じのように、PHPのバージョンによってオブジェクトや定数を割り当てるのは問題があります。また、ctorを使用すると、インスタンス化時に「デフォルト」をオーバーライドすることができます。これは読み(プロトタイプパターン)の価値があるかもしれません:http://ralphschindler.com/2012/03/09/php-constructor-best-practices-and-the-prototype-pattern – ficuscr

答えて

0

可能であれば、プロパティのデフォルト値を設定することをお勧めします。そうでない場合は、コンストラクタを使用します。教義ではORMコンストラクタを省略することができます。 はまた、 `__constructor`を使用して、列の宣言

<?php 
/** 
* @Entity 
*/ 
class City { 
    /** 
    * @var string 
    * 
    * @Column(type="string", length="50", options={"default" : "Washington DC"}) 
    */ 
    private $name = 'Washington DC'; 
    ... 
} 
+0

ありがとう、私は注釈を忘れていませんでした私はトピックをスムーズにするためにそれらを削除しました。 –

1

__constructにデフォルト値を定義する方が良いと言えます(特に多くのプロパティがある場合)、スカラー値だけでなくオブジェクトを割り当てることができます。

namespace UTM\UsersBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

class User 
{ 

    //... 

    private $created; 


    private $enabled; 

    //... 

    public function __construct() { 
     $this->created = new \DateTime(); 
     $this->enabled = true; 
    } 

    //... 

} 
関連する問題