2015-12-09 15 views
10

Vì những vấn đề tôi gặp phải với phiên bản symfony 2.7 (lỗi trang 404 ngay sau khi cài đặt dự án) Tôi bắt đầu sử dụng phiên bản Symfony 3.0 . Sau một số vấn đề nhỏ, tôi đã tìm ra rằng "app/console" được thay thế bằng "bin/console". Vì vậy, tôi đang làm việc tại một dự án mới và tôi đã xây dựng một gói mới với 1 thực thể gọi làĐối số dự kiến ​​của loại "chuỗi", "Vendor NameBundle Form EntitynameType" được cung cấp cho Symfony 3.0

Codeit/RestaurantBundle && CodeitRestaurantBundle:Reserveren

Formatchú thích, và các thực thể có một id và 1 lĩnh vực được gọi "naam "(chuỗi, 255). Tôi cập nhật các lược đồ, tôi tạo ra các thực thể của Codeit và sau đó đã được thực hiện thành công, tôi tạo ra một crud với các hành động viết. Định dạng lại là chú thíchtiền tố là/reserveren.

Vì vậy, nếu tôi truy cập trang web/máy chủ lưu trữ, tôi sẽ nhận được trang hiển thị của tổ chức của tôi. Thật không may nếu tôi cố gắng thêm một mục mới Tôi nhận được lỗi sau:

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

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

đang thực thể của tôi

<?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; 
    } 


} 

Trả lời

24

Các hình thức đã thay đổi khá nhiều trong 3.0. Bạn có thể tốt hơn khi kết nối với 2.8 ngay bây giờ.

Bạn không cho thấy nó nhưng tôi nghi ngờ, căn cứ vào thông báo lỗi, mã điều khiển của bạn trông giống như:

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

Đó là cách 2.x làm việc. Để sử dụng 3.x:

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

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

+0

Cảm ơn Cerad! Điều đó làm việc ra tốt .. Tôi sẽ xem xét lại để thực hiện một dự án mới với một phiên bản nổi tiếng hơn .. Cảm ơn anyway! – Gijsberts

+4

Không có gì sai khi sử dụng 3.x cho một dự án mới. Chỉ cần lưu ý rằng khá nhiều thông tin S2 không còn áp dụng nữa. – Cerad

+1

cảm ơn rất nhiều, đã phát điên vì sao biểu mẫu không hoạt động và bây giờ tôi biết. – Baig

1

Hãy thử như này:

/.../ 

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

thêm mục này cho lớp của tổ chức của bạn thay thế tên bằng thuộc tính phù hợp với bạn.

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

Vì vậy, trong Bundle của tôi/Entity/Reserveren.php Tôi phải thêm mã ở dưới cùng trong lớp, và tôi phải thay thế 'return $ this-> name;' trong 'return $ this-> naam'? Bởi vì đó không phải là không may làm việc .. :( – Gijsberts

+0

Bạn có thể đăng mã của tổ chức của bạn không? –

+0

Có, Hiện tại câu hỏi của tôi ở trên là – Gijsberts

1

thử với:

$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') 

thay vì điều này

$builder 
    ->add('naam'); 

Và thêm use tuyên bố:

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

Động lực: từ các 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:

Hope trợ giúp này

+0

Thật không may .. – Gijsberts

+0

Tôi hiểu bây giờ với câu trả lời @cerad rằng bài đăng trường tôi là Loại trường Đoán (không cần chỉ định loại) nhưng biểu mẫu chính bạn cần thực hiện khai báo (lớp) loại – Matteo

+0

Có, tôi đoán vậy, dù sao, cảm ơn bạn đã trả lời! :) – Gijsberts

Các vấn đề liên quan