2015-10-16 9 views
10

sto usando Symfony Standard Edition, e il lavoro tutto nella versione di Symfony2 .X finché non lo aggiorno a 3.0.x-dev.Impossibile caricare il tipo "text" in vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php alla linea 91

Anche nella versione più recente, tutto funziona tranne una pagina che mi danno un errore nel controller:

Impossibile caricare il tipo "text" 500 Internal Server Error - InvalidArgumentException

  1. in venditore/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php a riga 91
  2. a FormRegistry -> getType ('testo') in venditore/symfony/symfony/src/Symfony/Component/Form/FormFactory.php a linea 84
  3. a FormFactory -> createNamedBuilder ('bandiera', 'testo', null, array()) in vendor/symfony/symfony/src/Symfony/Component/Form/FormBuilder.php in linea 106
  4. a FormBuilder -> creare ('flag', 'testo', array()) in vendor/symfony/symfony/src/symfony/Component/Form/FormBuilder.php a linea 267
  5. a FormBuilder -> resolveChildren () in vendor/symfony/symfony/src/symfony/Component/Form/FormBuilder.php a linea 215
  6. a FormBuilder -> GetForm() in src/MyProject/FrontOfficeBundle/controller/ChallengeController.php a la linea 418

Nel controller che ho usato questo codice:

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

Anche se elimino il primo add ("flag", "testo"), l'interruttore di errore:

"pulsante" tipo Impossibile caricare

Quindi penso che il problema è nel metodo getForm(). Ho gassato che il metodo createFormBuilder() avesse bisogno di un parametro, quindi ho provato a passare un flag di oggetto che ha molti argomenti (flag, validate, ...).

Il problema non è cambiato è come se la sintassi fosse cambiata in questa versione, ma quando ho verificato il documentation, non ho riscontrato alcun problema nella mia sintassi.

La versione del modulo è 3.0-dev. L'ho verificato nel progetto github e quei file sono i latest. Ho usato

composer update 

E ho rimosso la cache ei file di registro ma il problema esiste.

Grazie per il vostro aiuto e mi dispiace per il mio cattivo inglese.

+0

Si prega di notare che la documentazione per il ramo 3.0 non è al link che hai inviato, ma piuttosto qui: http://symfony.com/doc/master/book/forms.html. È possibile modificare la versione della documentazione utilizzando il menu a discesa che si trova in alto a destra nella pagina –

+0

Assicurarsi inoltre di leggere il documento UPGRADE-3.0.md nell'installazione di Symfony per ottenere un elenco delle modifiche necessarie per l'aggiornamento a 3.0 –

+0

Grazie per la risposta, sì, intendo questo link, ma è lo stesso. Non ho aggiornato il mio progetto nel compositore, ho scaricato la versione master (3.0.x-dev) di symfony e ho posizionato il mio progetto in src. Quindi ho installato e aggiornato tutto con il compositore, quindi non ho UPGRADE-3.0.md. Tutte le mie pagine funzionano tranne questa pagina –

risposta

18

Ciò che @CarlosGranados intende per read the UPGRADE-3.0.md è leggere il file che indica come è necessario modificare il codice da quello di 2.x a 3.0 piuttosto che come aggiornare la base di codice di symfony. Sfortunatamente non menziona come affrontare questo problema di moduli.

Il problema che vi troverete di fronte è coperto nel [UPGRADE-2.8.md](https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.8.md) ed è dovuto ai nomi di forma text/button essere sconsigliato a favore del loro nome completo della classe (FQCN).

Da UPGRADE-2.8.md

nomi tipo sono stati deprecati e saranno rimossi in Symfony 3.0. Invece dei tipi di riferimento per nome, dovresti fare riferimento al loro nome di classe pienamente qualificato (FQCN). Con PHP 5.5 o versione successiva, è possibile utilizzare la "classe" costante che:

Prima:

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

Dopo:

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(); 

... e si va avanti per dirvi un bunch more ...

+1

Funziona, l'ho appena provato. Grazie per la condivisione. – mtchuente

2

Il nostro server web è ancora su php 5.3 - quindi devo trovare soluzioni alternative per symfony3 perché non posso usare TextType :: class sul nostro server live.

È possibile ridurre al minimo il proprio codice su grandi forme impostando una costante per il riferimento di classe:

//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')) 
     ; 
    } 

questo funziona per me!

Problemi correlati