php - Symfony2 रूप में डेटाटाइम फ़ील्ड पर डिफ़ॉल्ट मान सेट करें




symfony-2.1 (3)

मेरे पास एक फार्म है जिसमें कई फ़ील्ड हैं। उनमें से एक डेटाटाइम क्षेत्र है। उस फ़ील्ड के लिए डिफ़ॉल्ट मान कैसे परिभाषित करें?

मैंने संबंधित इकाई, नियंत्रक में, कन्स्ट्रक्टर में और __construct में मूल्य निर्धारित करने का प्रयास किया है:

$myEntity = new MyEntity();
$myEntity->setMyDate(new \DateTime());
$form = $this->createForm(new AddMyEntity(), $myEntity);

काम नहीं कर रहा।

BuildForm में $data चर परिभाषित करने का प्रयास किया:

$builder->add('myDate', 'date', array(
    'format' => \IntlDateFormatter::SHORT,
    'input' => 'datetime',
    'widget' => 'single_text',
    'data' => new \DateTime("now"));

या तो काम नहीं कर रहा है। कोई विचार, Symfony2 समुदाय?

संपादित करें: फोस्ट की मांग पर इकाई जोड़ना।

/**
 * @ORM\Column(name="myDate", type="datetime")
 * @Assert\NotBlank()
 */
private $myDate;

आप गुणों को CURRENT_TIMESTAMP पर अपडेट कर सकते हैं और वर्तमान समय स्टैम्प के लिए डिफ़ॉल्ट रूप से क्वेरी के माध्यम से अपडेट किए बिना स्वचालित समय स्टाम्प को स्वचालित रूप से अपडेट कर देंगे

`feildname` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP

इस समाधान को आपकी इकाई ऑब्जेक्ट को संशोधित करने की आवश्यकता नहीं है।

    $builder->add('myDate', DateTimeType::class, [
        'label' => 'My Date',
        'required' => false,
        'date_widget' => 'single_text',
        'time_widget' => 'single_text',
        'date_format' => 'dd/MM/yyyy'
    ]);

    $builder->get('myDate')->addModelTransformer(new CallbackTransformer(
        function ($value) {
            if(!$value) {
                return new \DateTime('now +1 month');
            }
            return $value;
        },
        function ($value) {
            return $value;
        }
    ));

यह समाधान केवल इस फ़ॉर्म के व्यवहार को लागू करता है, यह इस व्यवहार को इकाई के साथ जोड़ता नहीं है। आपके पास कई रूप हो सकते हैं जो विभिन्न आवश्यक व्यवहारों वाली इकाई को संशोधित करते हैं। कुछ को डिफ़ॉल्ट तिथि की आवश्यकता होती है, अन्य नहीं।


एलनूर का जवाब सही है और शायद अनुशंसित है। लेकिन पूर्णता के लिए, किसी फॉर्म में डेट विजेट के लिए डिफ़ॉल्ट मान सेट करने का एक वैकल्पिक तरीका डेटटाइम के उदाहरण के साथ विकल्प सरणी तर्क में data कुंजी निर्दिष्ट करना है।

$builder->add('myDate', 'date', array(
    'data' => new \DateTime()
));

नोट: यह प्रत्येक संपादन पर पहले सेट डेटाटाइम को ओवरराइट करेगा।





symfony-2.1