2012-01-03 10 views
39

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

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

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

काम नहीं।

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

या तो काम नहीं कर:

buildForm में $data चर को परिभाषित करने की कोशिश की। कोई विचार, Symfony2 समुदाय?

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

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

कृपया "MyEntity" श्रेणी में "myDate" की संपत्ति और फॉर्म प्रकार वर्ग "AddMyEntity" की विधि "buildForm" की परिभाषा दिखाएं। –

+0

मेरे प्रश्न का दूसरा भाग buildForm विधि का एक निकास है। और मैं इकाई भाग जोड़ दूंगा। –

+0

आपका कोड ठीक है, इसे काम करना चाहिए। लेकिन मुझे लगता है कि आप "myDate" फ़ील्ड के लिए डेटाटाइम सिद्धांत मैपिंग प्रकार का उपयोग करते हैं, इसलिए "AddMyEntity" कक्षा में डेटाटाइम फ़ील्ड प्रकार का बेहतर उपयोग करें http://symfony.com/doc/current/reference/forms/types/datetime.html –

उत्तर

56

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

class Entity 
{ 
    /** 
    * @var \DateTime 
    */ 
    private $date; 

    public function __construct() 
    { 
     $this->date = new \DateTime(); 
    } 
} 
+0

जैसा कि सवाल में कहा गया है, अगर सफलता के बिना इसे My_ntity() में __construct में सेट करने का प्रयास किया गया है। –

+0

बस अपना सुझाव पूरा करने के लिए, यह वास्तव में सरल प्रकारों पर काम करता है: टेक्स्ट, इन्ट्स और इसी तरह। यह डेटटाइम पर काम नहीं कर रहा है। –

+0

हम्म। मैं रचनाकारों में 'डेटटाइम' ऑब्जेक्ट्स प्रारंभ करता हूं और यह बहुत अच्छा काम करता है। शायद आपके ऐप में कहीं और कुछ गलत है। –

-4

आप इकाई निर्माता में क्वेरी के माध्यम से

`feildname` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP 
+2

उपरोक्त प्रश्न में कहा, मैं एक रूप में एक डिफ़ॉल्ट मान सेट करने की कोशिश कर रहा हूँ। डेटाबेस में नहीं मुझे उपयोगकर्ता को डिफ़ॉल्ट मान का सुझाव देने की आवश्यकता नहीं है। –

27

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

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

नोट: यह ऊपर लिख देगा कि पहले हर संपादित करें पर दिनांक निर्धारित किया है।

+6

में बनाए रखने वाले डिफ़ॉल्ट को जोड़ना बेहतर है, यह दृष्टिकोण केवल नई प्रविष्टि जोड़ने पर ही काम करता है लेकिन संपादन करते समय विफल रहता है क्योंकि यह डेटाबेस मान नहीं डालता है लेकिन वर्तमान समय –

+0

@MasindeMuliro Correct पर नहीं है। मैंने यह जवाब यहां जोड़ा क्योंकि सवाल Google में पहला परिणाम था और वहां एक परिदृश्य था जहां परीक्षणकर्ता को तुरंत चालू करने से परीक्षण नहीं होगा। अगर मुझे याद है कि किनारा मामला क्या था, तो मैं इसे उत्तर में जोड़ दूंगा। –

+1

धन्यवाद! यह मेरे लिए एक बेहतर समाधान था। मुझे उस तारीख को डिफ़ॉल्ट रूप से करने की आवश्यकता थी जब उपयोगकर्ता ने रिकॉर्ड संपादित किया था, न कि डेटाबेस में पहली बार बनाई गई तारीख। –

5

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

$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; 
     } 
    )); 

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

संबंधित मुद्दे