2015-10-16 6 views
10

मैं Symfony मानक संस्करण उपयोग कर रहा हूँ, और Symfony2 के संस्करण में सब कुछ काम पर .X जब तक मैं इसे 3.0.x-dev पर अपडेट नहीं करता।विक्रेता में प्रकार "पाठ" लोड नहीं कर सका/सिम्फोनी/सिम्फोनी/src/Symfony/घटक/प्रपत्र/FormRegistry.php लाइन 91

यहां तक ​​कि नए संस्करण में, सब कुछ एक पेज है कि मुझे नियंत्रक में एक त्रुटि देने को छोड़कर काम करता है:

प्रकार लोड नहीं कर सका "पाठ" 500 आंतरिक सर्वर त्रुटि - InvalidArgumentException

  1. विक्रेता/सिम्फनी/सिम्फनी/src/Symfony/घटक/फॉर्म/FormRegistry.php लाइन 91
  2. फॉर्म रजिस्ट्री में -> विक्रेता/सिम्फनी/सिम्फनी/src/Symfony/घटक/फॉर्म/में GetType ('text') FormFactory.php पर लाइन 84
  3. FormFactory पर -> createNamedBuilder ('ध्वज', 'पाठ', शून्य, सरणी()) विक्रेता में/सिम्फोनी/सिम्फोनी/src/Symfony/घटक/प्रपत्र/FormBuilder.php लाइन पर 106
  4. FormBuilder पर -> विक्रेता में ('ध्वज', 'पाठ', सरणी()) बनाने/सिम्फोनी/सिम्फोनी/src/Symfony/घटक/प्रपत्र/FormBuilder.php लाइन 267
  5. FormBuilder पर
  6. पर -> resolveChildren () विक्रेता में/सिम्फोनी/सिम्फोनी/src/Symfony/घटक/प्रपत्र/FormBuilder.php लाइन 215
  7. FormBuilder पर
  8. पर -> src में getForm()/MyProject/FrontOfficeBundle/नियंत्रक/ChallengeController.php पर लाइन 418

नियंत्रक में मैं इस कोड का प्रयोग किया:

$form = $this->createFormBuilder() 
->add("flag","text") 
->add("validate","button") 
->getForm(); 

यहां तक ​​कि अगर मैं, त्रुटि स्विच करने के लिए पहले ऐड (, "पाठ" "झंडा") को हटा दें:

प्रकार "बटन" लोड नहीं कर सका

तो मुझे लगता है कि इस समस्या विधि 0 में है। मैंने पाया कि विधि createFormBuilder() को पैरामीटर की आवश्यकता है इसलिए मैंने ऑब्जेक्ट को पास करने का प्रयास किया, जिसमें कई तर्क हैं (ध्वज, मान्य करें, ...)।

समस्या में बदलाव नहीं आया क्योंकि यह इस संस्करण में सिंटैक्स बदल गया था, लेकिन जब मैंने documentation सत्यापित किया, तो मुझे अपने वाक्यविन्यास में कोई समस्या नहीं मिली।

फॉर्म का संस्करण 3.0-dev है। मैंने इसे गीथब प्रोजेक्ट में सत्यापित किया है और वे फाइलें लेटेस हैं। मैंने

composer update 

और मैंने कैश और लॉग फ़ाइलों को हटा दिया लेकिन समस्या मौजूद है।

आपकी मदद के लिए धन्यवाद और मेरी खराब अंग्रेजी के लिए खेद है।

+0

कृपया ध्यान दें कि 3.0 शाखा के लिए दस्तावेज़ आपके द्वारा भेजे गए लिंक पर नहीं है, बल्कि यहां: http://symfony.com/doc/master/book/forms.html। आप –

+0

पृष्ठ के ऊपरी दाएं भाग में स्थित ड्रॉपडाउन का उपयोग करके प्रलेखन के संस्करण को बदल सकते हैं। 3.0 –

+0

पर अपग्रेड करने के लिए आवश्यक परिवर्तनों की सूची प्राप्त करने के लिए अपने सिम्फनी इंस्टॉलेशन में UPGRADE-3.0.md दस्तावेज़ को भी पढ़ना सुनिश्चित करें। आपके उत्तर के लिए धन्यवाद, हाँ मेरा मतलब यह लिंक है, लेकिन यह वही है। मैंने संगीतकार में अपनी प्रोजेक्ट को अपग्रेड नहीं किया है, मैंने सिम्फनी के मास्टर वर्जन (3.0.x-dev) को डाउनलोड किया है और मैंने अपनी प्रोजेक्ट को src में रखा है। फिर मैंने संगीतकार के साथ सबकुछ स्थापित और अपडेट किया है इसलिए मेरे पास UPGRADE-3.0.md नहीं है। मेरे सभी पृष्ठ इस पृष्ठ को छोड़कर काम करते हैं –

उत्तर

18

क्या @CarlosGranados का अर्थ read the UPGRADE-3.0.md है जो फ़ाइल आपको पढ़ता है जो आपको बताता है कि आपको 2.x से 3 के कोड को बदलने की आवश्यकता होगी।सिम्फनी कोड बेस को अपग्रेड करने के बजाए 0। दुर्भाग्य से यह इस फ़ॉर्म के मुद्दे से निपटने का उल्लेख नहीं करता है।

मुद्दा यह है कि आपके सामने उत्पन्न हो जाएगा प्रपत्र नाम text/button उनकी पूरी तरह से योग्य वर्ग के नाम (FQCN) के पक्ष में पदावनत होने के कारण [UPGRADE-2.8.md](https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.8.md) में शामिल और है।

UPGRADE-2.8.md से

प्रकार नाम पदावनत कर रहे थे और Symfony 3.0 में निकाल दिया जाएगा। नाम से संदर्भों को संदर्भित करने के बजाय, आपको उनके पूर्ण योग्यता वाले क्लास नाम (एफक्यूसीएन) के बजाय संदर्भित करना चाहिए। पीएचपी 5.5 के साथ या बाद में, आपको लगता है कि के लिए "वर्ग" निरंतर उपयोग कर सकते हैं:

से पहले:

$form = $this->createFormBuilder() 
    ->add('name', 'text') 
    ->add('age', 'integer') 
    ->getForm(); 

के बाद:

use Symfony\Component\Form\Extension\Core\Type\IntegerType; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 

$form = $this->createFormBuilder() 
    ->add('name', TextType::class) 
    // or ->add('name', Symfony\Component\Form\Extension\Core\Type\TextType) 
    ->add('age', IntegerType::class) 
    // or ->add('age', Symfony\Component\Form\Extension\Core\Type\IntegerType) 
    ->getForm(); 

... और यह आप एक बताने के लिए पर चला जाता है गुच्छा और अधिक ...

+1

यह काम करता है, मैंने अभी कोशिश की है। साझा करने के लिए धन्यवाद। – mtchuente

2

हमारा वेबसर्वर अभी भी PHP 5.3 पर है - इसलिए मुझे symfony3 के लिए वर्कअराउंड ढूंढना है क्योंकि मैं अपने लाइव सर्वर पर टेक्स्टटाइप :: क्लास का उपयोग नहीं कर सकता।

आप वर्ग संदर्भ के लिए एक निरंतर की स्थापना करके बड़े रूपों पर अपने कोड को कम कर सकते हैं:

//use Symfony\Component\Form\Extension\Core\Type\EmailType; 
//use Symfony\Component\Form\Extension\Core\Type\TextType; 

const textType = 'Symfony\Component\Form\Extension\Core\Type\TextType'; 
const emailType = 'Symfony\Component\Form\Extension\Core\Type\EmailType'; 

class ProfileType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('username', textType, array('label' => 'Username')) 
      ->add('address1', textType, array('label' => 'Address1')) 
      ->add('address2', textType, array('label' => 'Address2')) 
      ->add('postcode', textType, array('label' => 'Postcode')) 
     ; 
    } 

यह मेरे लिए काम करता है!

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