2016-03-22 14 views
-1

Ben FosRestBundle kullanmak ve i gömülü bilgilerle varlık kaydetmeye istiyorum:% name özelliği bir diziye yazamıyor. Belki mülk yolunu bunun yerine% isim olarak yazmalısınız?

Üst varlık:

class ServiceOffer 
{ 
    use ORMBehaviors\SoftDeletable\SoftDeletable; 

    /** 
    * @var PriceLevel 
    * 
    * @ORM\OneToMany(targetEntity="PriceLevel", mappedBy="serviceOffer", cascade={"persist"}) 
    * 
    * @Serializer\Expose 
    * @Serializer\Groups({"service-offer"}) 
    */ 
    private $priceLevels; 

    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->priceLevels = new ArrayCollection(); 
    } 

    /** 
    * Add priceLevel 
    * 
    * @param PriceLevel $priceLevel 
    * 
    * @return ServiceOffer 
    */ 
    public function addPriceLevel(PriceLevel $priceLevel) 
    { 
     $priceLevel->setServiceOffer($this); 
     $this->priceLevels[] = $priceLevel; 

     return $this; 
    } 

    /** 
    * Remove priceLevel 
    * 
    * @param PriceLevel $priceLevel 
    */ 
    public function removePriceLevel(PriceLevel $priceLevel) 
    { 
     $this->priceLevels->removeElement($priceLevel); 
    } 

    /** 
    * Get priceLevels 
    * 
    * @return Collection 
    */ 
    public function getPriceLevels() 
    { 
     return $this->priceLevels; 
    } 
} 

Çocuklar:

class PriceLevel 
{ 

    use ORMBehaviors\Timestampable\Timestampable; 
    use ORMBehaviors\SoftDeletable\SoftDeletable; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * 
    * @Serializer\Expose 
    * @Serializer\Groups({"service-offer"}) 
    */ 
    protected $id; 

    /** 
    * @var ServiceOffer 
    * 
    * @ORM\ManyToOne(targetEntity="ServiceOffer", inversedBy="priceLevels") 
    * @ORM\JoinColumn(name="service_offer_id", referencedColumnName="id") 
    */ 
    protected $serviceOffer; 

    /** 
    * @ORM\ManyToOne(targetEntity="EmployeeGrade", inversedBy="priceLevels") 
    * @ORM\JoinColumn(name="employee_grade_id", referencedColumnName="id") 
    * 
    * @Serializer\Expose 
    * @Serializer\Groups({"service-offer"}) 
    */ 
    protected $employeeGrade; 

    /** 
    * @var double 
    * 
    * @ORM\Column(name="price", type="float", nullable=true) 
    * 
    * @Serializer\Expose 
    * @Serializer\Groups({"service-offer"}) 
    */ 
    protected $price; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="duration", type="integer", nullable=true) 
    * 
    * @Serializer\Expose 
    * @Serializer\Groups({"service-offer"}) 
    */ 
    protected $duration; 
} 

Denetleyici:

public function putServiceOfferAction(Request $request) 
    { 
     try { 
      $parameters = json_decode($request->getContent(), true); 

      $serviceOffer = /* submit request data */; 

      return $serviceOffer; 
     } catch (InvalidFormException $e) { 
      $serializer = $this->get('serializer'); 

      $response = new Response(); 
      $response->setStatusCode(400); 
      $response->setContent($serializer->serialize($e->getForm()->getErrors(true), 'json')); 
      return $response; 
     } 
    } 

Veli formu :

class ServiceOfferForm extends AbstractType 
{ 

    /** 
    * {@inheritdoc} 
    */ 
    public function getName() 
    { 
     return 'service_offer_form'; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(
      array(
       'data_class' => 'CoreBundle\Entity\ServiceOffer', 
       'error_bubbling' => true, 
      ) 
     ); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('id', HiddenType::class, array('mapped' => false)); 
     $builder->add('price_levels', CollectionType::class, array(
      'property_path' => 'priceLevels', 
      'allow_add' => true, 
      'allow_delete' => true, 
      'by_reference' => false, 
      'entry_type' => ServiceOfferPriceLevelForm::class 
     )); 
    } 
} 

Çocuk formu: (yükü koymak) i kontrolöre gönderme

/** 
    * {@inheritdoc} 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(
      array(
       'data_class' => 'CoreBundle\Entity\PriceLevel', 
       'error_bubbling' => true, 
      ) 
     ); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('id', HiddenType::class, array('mapped' => false)); 
     $builder->add('employee_grade', 'entity', array(
      'property_path' => 'employeeGrade', 
      'class' => 'CoreBundle:EmployeeGrade', 
     )); 
     $builder->add('price', null, array(
      'property_path' => 'price', 
     )); 
     $builder->add('duration', null, array(
      'property_path' => 'duration', 
     )); 
    } 
} 

veri:

{ 
    "id": 2, 
    "name": "asd", 
    "price_levels": [ 
    { 
     "id": 1, 
     "employee_grade": 1, 
     "price": 12.59, 
     "duration": "25" 
    }, 
    { 
     "price": 360, 
     "duration": "125" 
    }, 
    { 
     "price": 360, 
     "duration": "125" 
    } 
    ] 
} 

Besteci:

{ 
... 
    "require": { 
     "php": ">=5.5.9", 
     "symfony/symfony": "3.0.3", 
     "doctrine/orm": "2.5.4", 
     "doctrine/doctrine-bundle": "^1.6", 
     "doctrine/doctrine-cache-bundle": "^1.2", 
     "symfony/swiftmailer-bundle": "^2.3", 
     "symfony/monolog-bundle": "^2.8", 
     "sensio/distribution-bundle": "^5.0", 
     "sensio/framework-extra-bundle": "^3.0.2", 
     "incenteev/composer-parameter-handler": "^2.0", 
     "friendsofsymfony/user-bundle": "2.0.x-dev", 
     "symfony/assetic-bundle": "^2.8", 
     "twig/extensions": "^1.3", 
     "knplabs/doctrine-behaviors": "^1.3", 
     "vich/uploader-bundle": "^1.0", 
     "jms/serializer-bundle": "^1.1", 
     "liip/imagine-bundle": "^1.5", 
     "nelmio/api-doc-bundle": "^2.11", 
     "friendsofsymfony/jsrouting-bundle": "^1.6", 
     "friendsofsymfony/rest-bundle": "^1.7", 
     "twig/twig": "1.x-dev", 
     "sonata-project/admin-bundle": "dev-master", 
     "sonata-project/doctrine-orm-admin-bundle": "^2.3" 
    } 
... 
} 

Sonucu (soru noktası) : Özellik "\" employeeGrade \ "yazamıyor bir diziye. Belki de mülkiyet yolunu \ "[employeeGrade] \" olarak yazmalısın?

Soru: Katıştırılmış bilgileri ekleyerek ve silerek nasıl kaydedebilirim?

DB'de bazı satırlar varsa ve bu satırın çalışma klasörüyle aynı şekilde çalışmayı dener; Silmeyi denediğimde satır kimliği silinmez; satır eklemeyi denerseniz - hata gösterir.

+0

Oku etiket açıklamalara symfony sürümünü değişen alakalı! – Olaf

+0

@Olaf: tamam, teşekkürler –

cevap

0

cevap aşağıdaki şöyledir:

chenge şekilde sınıftaki bazı anlar:

1) yerine

use Symfony\Component\OptionsResolver\OptionsResolver; 

use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

2) setDefaultOptions yönteminden adlandırmak yapısına eçenekler

Bu eklemeden önce 2.8 ila 3.0.3

İlgili konular