2015-12-09 43 views
10

verilen "dize", "Satıcı \ NameBundle \ Form \ EntitynameType" beklenen argüman Symfony sürüm 2.7 ile karşılaştığım sorunları (bir proje yükledikten hemen sonra 404 sayfa hatası) Symfony sürüm 3.0 kullanmaya başladım . Bazı küçük problemlerden sonra "app/console" nun "bin/console" ile değiştirildiğini anladım. naam" Bu yüzden yeni proje üzerinde şimdi çalışıyorum ve zaten 1 varlık Biçimiaçıklama olduğunuSymfony 3.0

Codeit/RestaurantBundle && CodeitRestaurantBundle:Reserveren

denilen yeni bir paket oluşturmak gelmiş ve varlık kimliğine sahipse ve 1 tarla denilen "(string, 255). Şemaları güncelledim, Codeit varlıklarını oluşturdum ve bundan sonra başarılı bir şekilde yaptım. Biçim yine ek açıklaması ve idi, önek/reserveren'dur.

Web/reserveren sayfasını ziyaret edersem, sayfamın bir tanıtım sayfasını alırım. Ben aşağıdaki hatayı alıyorum yeni bir giriş eklemeyi deneyin Maalesef eğer:

Expected argument of type "string", "Codeit\RestaurantBundle\Form\ReserverenType" given

My Paketi/Form/ReserverenType.php

<?php 

namespace Codeit\RestaurantBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

class ReserverenType extends AbstractType 
{ 
/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('naam') 
    ; 
} 

/** 
* @param OptionsResolver $resolver 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Codeit\RestaurantBundle\Entity\Reserveren' 
    )); 
} 
} 

Benim varlık kodu

<?php 

namespace Codeit\RestaurantBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Reserveren 
* 
* @ORM\Table(name="reserveren") 
* @ORM\Entity(repositoryClass="Codeit\RestaurantBundle\Repository\ReserverenRepository") 
*/ 
class Reserveren 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="Naam", type="string", length=255) 
    */ 
    private $naam; 


    /** 
    * Get id 
    * 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set naam 
    * 
    * @param string $naam 
    * 
    * @return Reserveren 
    */ 
    public function setNaam($naam) 
    { 
     $this->naam = $naam; 

     return $this; 
    } 

    /** 
    * Get naam 
    * 
    * @return string 
    */ 
    public function getNaam() 
    { 
     return $this->naam; 
    } 


} 

cevap

24

Formlar 3.0'da biraz değişti bu yardım. Şimdilik 2,8 ile yapışmaktan daha iyi olabilirsiniz.

Bunu göstermedi ancak kontrolör kod benziyor ben, hata mesajına göre, şüpheli: şeyler yapmanın 2.x yoludur

$form = $this->createForm(new ReservernType(), $item); 

. 3.x kullanım için:

$form = $this->createForm(ReservernType::class, $item); 

http://symfony.com/doc/current/book/forms.html#creating-form-classes

+0

Teşekkürler Cerad! Bu iyi çalıştı .. Ben daha bilinen bir sürümü ile yeni bir proje yapmak için yeniden düşünecek .. Yine de teşekkürler! – Gijsberts

+4

Yeni bir proje için 3.x kullanımıyla ilgili yanlış bir şey yok. Sadece orada bulunan S2 bilgilerinin birazının artık geçerli olmadığını unutmayın. – Cerad

+1

çok teşekkürler, formun neden çalışmadığına ve şimdi bildiğime kızıyordu. – Baig

1

gibi deneyin this:

/.../ 

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

/.../ 

class ReserverenType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
      $builder->add('naam', TextType::class); 
    } 
} 
-1

bunu ekle varlığınızın sınıfına, sizin adınıza uygun bir özellik adıyla değiştirin.

public function __toString() { 
    return $this->name; 
} 
+0

Yani, benim Bundle/Varlık/reserveren içinde.php kodu sınıfın alt kısmına eklemeliyim ve '$ this-> naam' 'return $ this-> name; Bu ne yazık ki çalışmıyor ... :( – Gijsberts

+0

Varlık kodunuzu gönderebilir misiniz? –

+0

Evet, Şimdi benim sorum da yukarıda! – Gijsberts

1

ile deneyin: Bu

$builder 
    ->add('naam'); 

yerine

$builder 
     ->add('naam', TextType::class); 
     // If you use PHP 5.3 or 5.4 you must use 
     // ->add('naam','Symfony\Component\Form\Extension\Core\Type\TextType') 

Ve use deyimi ekleyin:

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

Motivasyon: dan upgrade guide:

Type names were deprecated and will be removed in Symfony 3.0. Instead of referencing types by name, you should reference them by their fully-qualified class name (FQCN) instead. With PHP 5.5 or later, you can use the "class" constant for that:

Umut

+0

Maalesef .. – Gijsberts

+0

Anladığım alanın @cerad yanıtı ile Alan Türünü Tahmin et (anlamanız gerekmiyor) ama ihtiyacınız olan ana formu anladım. (sınıf) tip – Matteo

+0

Evet, her neyse, cevabınız için teşekkürler! :) – Gijsberts