2013-07-15 62 views
2

我有更新的產品時,這個錯誤:(更新一類是確定)Symfony2的:類的DateTime的對象無法轉換爲字符串

Catchable Fatal Error: Object of class DateTime could not be converted to string in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Translation\Translator.php line 188

enter image description here

enter image description here

全部堆棧跟蹤:

Stack Trace 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Translation\Translator.php at line 188 - 
      $this->loadCatalogue($locale); 
     } 
     return strtr($this->catalogues[$locale]->get((string) $id, $domain), $parameters); 
    } 
    /** 
at ErrorHandler ->handle ('4096', 'Object of class DateTime could not be converted to string', 'C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Translation\Translator.php', '188', array('id' => 'This value should be blank.', 'parameters' => array('{{ value }}' => object(DateTime)), 'domain' => 'validators', 'locale' => 'en')) 
at strtr ('This value should be blank.', array('{{ value }}' => object(DateTime))) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Translation\Translator.php at line 188 + 
at Translator ->trans ('This value should be blank.', array('{{ value }}' => object(DateTime)), 'validators') 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\ExecutionContext.php at line 93 + 
at ExecutionContext ->addViolation ('This value should be blank.', array('{{ value }}' => object(DateTime))) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\Constraints\BlankValidator.php at line 30 + 
at BlankValidator ->validate (object(DateTime), object(Blank)) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\ExecutionContext.php at line 276 + 
at ExecutionContext ->executeConstraintValidators (object(DateTime), array(object(Blank))) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\ExecutionContext.php at line 241 + 
at ExecutionContext ->validateValue (object(DateTime), array(object(Blank))) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\ValidationVisitor.php at line 110 + 
at ValidationVisitor ->visit (object(PropertyMetadata), object(DateTime), 'Default', 'data.created_at') 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\Mapping\MemberMetadata.php at line 47 + 
at MemberMetadata ->accept (object(ValidationVisitor), object(DateTime), 'Default', 'data.created_at', null) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\Mapping\ClassMetadata.php at line 114 + 
at ClassMetadata ->accept (object(ValidationVisitor), object(Product), 'Default', 'data') 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\ValidationVisitor.php at line 162 + 
at ValidationVisitor ->validate (object(Product), 'Default', 'data', true, false) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\ExecutionContext.php at line 227 + 
at ExecutionContext ->validate (object(Product), 'data', 'Default', true) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Validator\Constraints\FormValidator.php at line 60 + 
at FormValidator ->validate (object(Form), object(Form)) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\ExecutionContext.php at line 276 + 
at ExecutionContext ->executeConstraintValidators (object(Form), array(object(Form))) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\ExecutionContext.php at line 241 + 
at ExecutionContext ->validateValue (object(Form), array(object(Form))) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\ValidationVisitor.php at line 110 + 
at ValidationVisitor ->visit (object(ClassMetadata), object(Form), 'Default', '') 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\Mapping\ClassMetadata.php at line 107 + 
at ClassMetadata ->accept (object(ValidationVisitor), object(Form), 'Default', '') 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\ValidationVisitor.php at line 162 + 
at ValidationVisitor ->validate (object(Form), 'Default', '', false, false) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Validator\Validator.php at line 90 + 
at Validator ->validate (object(Form)) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Validator\EventListener\ValidationListener.php at line 55 + 
at ValidationListener ->validateForm (object(FormEvent)) 
at call_user_func (array(object(ValidationListener), 'validateForm'), object(FormEvent)) 
in C:\xampp\htdocs\PhpProject1\app\cache\dev\classes.php at line 1655 + 
at EventDispatcher ->doDispatch (array(array(object(ValidationListener), 'validateForm')), 'form.post_bind', object(FormEvent)) 
in C:\xampp\htdocs\PhpProject1\app\cache\dev\classes.php at line 1588 + 
at EventDispatcher ->dispatch ('form.post_bind', object(FormEvent)) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\EventDispatcher\ImmutableEventDispatcher.php at line 42 + 
at ImmutableEventDispatcher ->dispatch ('form.post_bind', object(FormEvent)) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Form\Form.php at line 624 + 
at Form ->submit (object(Request)) 
in C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Form\Form.php at line 638 + 
at Form ->bind (object(Request)) 
in C:\xampp\htdocs\PhpProject1\src\Mobile\BusinessBundle\Controller\ProductController.php at line 132 + 
at ProductController ->updateAction (object(Request), '7') 
at call_user_func_array (array(object(ProductController), 'updateAction'), array(object(Request), '7')) 
in C:\xampp\htdocs\PhpProject1\app\bootstrap.php.cache at line 2770 + 
at HttpKernel ->handleRaw (object(Request), '1') 
in C:\xampp\htdocs\PhpProject1\app\bootstrap.php.cache at line 2744 + 
at HttpKernel ->handle (object(Request), '1', true) 
in C:\xampp\htdocs\PhpProject1\app\bootstrap.php.cache at line 2874 + 
at ContainerAwareHttpKernel ->handle (object(Request), '1', true) 
in C:\xampp\htdocs\PhpProject1\app\bootstrap.php.cache at line 2175 + 
at Kernel ->handle (object(Request)) 
in C:\xampp\htdocs\PhpProject1\web\app_dev.php at line 29 + 

下面是代碼: Product.php

<?php 

namespace Mobile\BusinessBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Lib\Functions; 

/** 
* Product 
*/ 
class Product 
{ 

/** 
* @var integer 
*/ 
private $id; 

/** 
* @var string 
*/ 
private $name; 

/** 
* @var string 
*/ 
private $slug; 

/** 
* @var float 
*/ 
private $price; 

/** 
* @var float 
*/ 
private $discount; 

/** 
* @var string 
*/ 
private $description; 

/** 
* @var string 
*/ 
private $detail; 

/** 
* @var string 
*/ 
private $sku; 

/** 
* @var integer 
*/ 
private $views; 

/** 
* @var boolean 
*/ 
private $is_active; 

/** 
* @var \DateTime 
*/ 
private $created_at; 

/** 
* @var \DateTime 
*/ 
private $updated_at; 

/** 
* @var \Doctrine\Common\Collections\Collection 
*/ 
private $categories; 

/** 
* Constructor 
*/ 
public function __construct() 
{ 
    $this->categories = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

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

/** 
* Set name 
* 
* @param string $name 
* @return Product 
*/ 
public function setName($name) 
{ 
    $this->name = $name; 

    return $this; 
} 

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

/** 
* Set slug 
* 
* @param string $slug 
* @return Product 
*/ 
public function setSlug($slug) 
{ 
    $this->slug = $slug; 

    return $this; 
} 

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

/** 
* Set price 
* 
* @param float $price 
* @return Product 
*/ 
public function setPrice($price) 
{ 
    $this->price = $price; 

    return $this; 
} 

/** 
* Get price 
* 
* @return float 
*/ 
public function getPrice() 
{ 
    return $this->price; 
} 

/** 
* Set discount 
* 
* @param float $discount 
* @return Product 
*/ 
public function setDiscount($discount) 
{ 
    $this->discount = $discount; 

    return $this; 
} 

/** 
* Get discount 
* 
* @return float 
*/ 
public function getDiscount() 
{ 
    return $this->discount; 
} 

/** 
* Set description 
* 
* @param string $description 
* @return Product 
*/ 
public function setDescription($description) 
{ 
    $this->description = $description; 

    return $this; 
} 

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

/** 
* Set detail 
* 
* @param string $detail 
* @return Product 
*/ 
public function setDetail($detail) 
{ 
    $this->detail = $detail; 

    return $this; 
} 

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

/** 
* Set sku 
* 
* @param string $sku 
* @return Product 
*/ 
public function setSku($sku) 
{ 
    $this->sku = $sku; 

    return $this; 
} 

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

/** 
* Set views 
* 
* @param integer $views 
* @return Product 
*/ 
public function setViews($views) 
{ 
    $this->views = $views; 

    return $this; 
} 

/** 
* Get views 
* 
* @return integer 
*/ 
public function getViews() 
{ 
    return $this->views; 
} 

/** 
* Set is_active 
* 
* @param boolean $isActive 
* @return Product 
*/ 
public function setIsActive($isActive) 
{ 
    $this->is_active = $isActive; 

    return $this; 
} 

/** 
* Get is_active 
* 
* @return boolean 
*/ 
public function getIsActive() 
{ 
    return $this->is_active; 
} 

/** 
* Set created_at 
* 
* @param \DateTime $createdAt 
* @return Product 
*/ 
public function setCreatedAt($createdAt) 
{ 
    $this->created_at = $createdAt; 

    return $this; 
} 

/** 
* Get created_at 
* 
* @return \DateTime 
*/ 
public function getCreatedAt() 
{ 
    return $this->created_at; 
} 

/** 
* Set updated_at 
* 
* @param \DateTime $updatedAt 
* @return Product 
*/ 
public function setUpdatedAt($updatedAt) 
{ 
    $this->updated_at = $updatedAt; 

    return $this; 
} 

/** 
* Get updated_at 
* 
* @return \DateTime 
*/ 
public function getUpdatedAt() 
{ 
    return $this->updated_at; 
} 

/** 
* Add categories 
* 
* @param \Mobile\BusinessBundle\Entity\Category $categories 
* @return Product 
*/ 
public function addCategorie(\Mobile\BusinessBundle\Entity\Category $categories) 
{ 
    $this->categories[] = $categories; 

    return $this; 
} 

/** 
* Remove categories 
* 
* @param \Mobile\BusinessBundle\Entity\Category $categories 
*/ 
public function removeCategorie(\Mobile\BusinessBundle\Entity\Category $categories) 
{ 
    $this->categories->removeElement($categories); 
} 

/** 
* Get categories 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getCategories() 
{ 
    return $this->categories; 
} 
/** 
* @ORM\PrePersist 
*/ 
public function onPrePersist() 
{ 
    $this->created_at = new \DateTime(); 
    $this->updated_at = new \DateTime(); 
    $this->views = 0; 
    $this->is_active = true; 
    $this->slug = Functions::url_friendly($this->name); 
} 

/** 
* @ORM\PreUpdate 
*/ 
public function onPreUpdate() 
{ 
    $this->updated_at = new \DateTime(); 
} 

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

Product.orm.yml

Mobile\BusinessBundle\Entity\Product: 
type: entity 
repositoryClass: Mobile\BusinessBundle\Entity\ProductRepository 
manyToMany: 
    categories: 
     targetEntity: Category 
     inversedBy: products 
table: products 
fields: 
    id: 
     type: bigint 
     id: true 
     generator: 
      strategy: AUTO 
    name: 
     type: string 
     length: 255 
    slug: 
     type: string 
     length: 255 
    price: 
     type: decimal 
     length: null 
    discount: 
     type: decimal 
     length: null 
    description: 
     type: text 
     length: null 
    detail: 
     type: text 
     length: null 
    sku: 
     type: string 
     length: 45 
    views: 
     type: bigint 
    is_active: 
     type: boolean 
    created_at: 
     type: datetime 
    updated_at: 
     type: datetime 
lifecycleCallbacks: 
    prePersist: [onPrePersist] 
    preUpdate: [onPreUpdate] 

ProductType.php

<?php 

namespace Mobile\BusinessBundle\Form; 

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

class ProductType extends AbstractType 
{ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('name') 
     ->add('slug') 
     ->add('price') 
     ->add('discount') 
     ->add('description') 
     ->add('detail') 
     ->add('sku') 
     ->add('views') 
     ->add('is_active') 
     ->add('created_at') 
     ->add('updated_at') 
     ->add('categories') 
    ; 
} 

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Mobile\BusinessBundle\Entity\Product' 
    )); 
} 

public function getName() 
{ 
    return 'mobile_businessbundle_producttype'; 
} 
} 

ProductControl ler.php

<?php 

namespace Mobile\BusinessBundle\Controller; 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

use Mobile\BusinessBundle\Entity\Product; 
use Mobile\BusinessBundle\Form\ProductType; 

/** 
* Product controller. 
* 
*/ 
class ProductController extends Controller 
{ 

/** 
* Lists all Product entities. 
* 
*/ 
public function indexAction() 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $entities = $em->getRepository('MobileBusinessBundle:Product')->findAll(); 

    return $this->render('MobileBusinessBundle:Product:index.html.twig', array(
     'entities' => $entities, 
    )); 
} 
/** 
* Creates a new Product entity. 
* 
*/ 
public function createAction(Request $request) 
{ 
    $entity = new Product(); 
    $form = $this->createForm(new ProductType(), $entity); 
    $form->bind($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($entity); 
     $em->flush(); 

     return $this->redirect($this->generateUrl('product_show', array('id' => $entity->getId()))); 
    } 

    return $this->render('MobileBusinessBundle:Product:new.html.twig', array(
     'entity' => $entity, 
     'form' => $form->createView(), 
    )); 
} 

/** 
* Displays a form to create a new Product entity. 
* 
*/ 
public function newAction() 
{ 
    $entity = new Product(); 
    $form = $this->createForm(new ProductType(), $entity); 

    return $this->render('MobileBusinessBundle:Product:new.html.twig', array(
     'entity' => $entity, 
     'form' => $form->createView(), 
    )); 
} 

/** 
* Finds and displays a Product entity. 
* 
*/ 
public function showAction($id) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $entity = $em->getRepository('MobileBusinessBundle:Product')->find($id); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find Product entity.'); 
    } 

    $deleteForm = $this->createDeleteForm($id); 

    return $this->render('MobileBusinessBundle:Product:show.html.twig', array(
     'entity'  => $entity, 
     'delete_form' => $deleteForm->createView(),  )); 
} 

/** 
* Displays a form to edit an existing Product entity. 
* 
*/ 
public function editAction($id) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $entity = $em->getRepository('MobileBusinessBundle:Product')->find($id); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find Product entity.'); 
    } 

    $editForm = $this->createForm(new ProductType(), $entity); 
    $deleteForm = $this->createDeleteForm($id); 

    return $this->render('MobileBusinessBundle:Product:edit.html.twig', array(
     'entity'  => $entity, 
     'edit_form' => $editForm->createView(), 
     'delete_form' => $deleteForm->createView(), 
    )); 
} 

/** 
* Edits an existing Product entity. 
* 
*/ 
public function updateAction(Request $request, $id) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $entity = $em->getRepository('MobileBusinessBundle:Product')->find($id); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find Product entity.'); 
    } 

    $deleteForm = $this->createDeleteForm($id); 
    $editForm = $this->createForm(new ProductType(), $entity); 
    $editForm->bind($request); 

    if ($editForm->isValid()) { 
     $em->persist($entity); 
     $em->flush(); 

     return $this->redirect($this->generateUrl('product_edit', array('id' => $id))); 
    } 

    return $this->render('MobileBusinessBundle:Product:edit.html.twig', array(
     'entity'  => $entity, 
     'edit_form' => $editForm->createView(), 
     'delete_form' => $deleteForm->createView(), 
    )); 
} 
/** 
* Deletes a Product entity. 
* 
*/ 
public function deleteAction(Request $request, $id) 
{ 
    $form = $this->createDeleteForm($id); 
    $form->bind($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $entity = $em->getRepository('MobileBusinessBundle:Product')->find($id); 

     if (!$entity) { 
      throw $this->createNotFoundException('Unable to find Product entity.'); 
     } 

     $em->remove($entity); 
     $em->flush(); 
    } 

    return $this->redirect($this->generateUrl('product')); 
} 

/** 
* Creates a form to delete a Product entity by id. 
* 
* @param mixed $id The entity id 
* 
* @return \Symfony\Component\Form\Form The form 
*/ 
private function createDeleteForm($id) 
{ 
    return $this->createFormBuilder(array('id' => $id)) 
     ->add('id', 'hidden') 
     ->getForm() 
    ; 
} 
} 

edit.html.twig

{% extends '::base.html.twig' %} 

{% block body -%} 
    <h1>Product edit</h1> 

    <form action="{{ path('product_update', { 'id': entity.id }) }}" method="post" {{ form_enctype(edit_form) }}> 
     <input type="hidden" name="_method" value="PUT" /> 
     {{ form_widget(edit_form) }} 
     <p> 
      <button type="submit">Edit</button> 
     </p> 
    </form> 

     <ul class="record_actions"> 
    <li> 
     <a href="{{ path('product') }}"> 
      Back to the list 
     </a> 
    </li> 
    <li> 
     <form action="{{ path('product_delete', { 'id': entity.id }) }}" method="post"> 
      <input type="hidden" name="_method" value="DELETE" /> 
      {{ form_widget(delete_form) }} 
      <button type="submit">Delete</button> 
     </form> 
    </li> 
</ul> 
{% endblock %} 

更新時間:因爲我創建的文件validation.yml的產品實體與created_at 發生錯誤:空白。 移動\ BusinessBundle \實體\產品: 屬性: created_at: - 空白:〜

+0

你有intl擴展嗎? – mpm

+0

@mpm:是的,我用過了。 –

+0

請顯示完整的錯誤堆棧跟蹤 –

回答

2

看起來像你的校驗問題。可能是validators.yml,因爲我看不到實體上的驗證註釋。您試圖驗證DateTime,NotBlank驗證器試圖向您顯示錯誤。將其更改爲NotNull驗證程序。

'C:\xampp\htdocs\PhpProject1\vendor\symfony\symfony\src\Symfony\Component\Translation\Translator.php', '188', array('id' => 'This value should be blank.', 'parameters' => array('{{ value }}' => object(DateTime)), 'domain' => 'validators', 'locale' => 'en')) 
at strtr ('This value should be blank.', array('{{ value }}' => object(DateTime))) 
+0

感謝您的建議。這正是這裏的錯誤。我爲Product實體創建了validation.yml,並將created_at設置爲Blank:〜。所以更新產品時會導致錯誤。 我的問題已解決。謝謝。 –

+0

很高興能幫到你:) –

相關問題