Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
221 views
in Technique[技术] by (71.8m points)

php - symfony2 Catchable Fatal Error: Object of class could not be converted to string

I have this Entity defined:

<?php

namespace ApwBlackbullBundleEntity;

use DoctrineCommonCollectionsArrayCollection;
use DoctrineORMMapping as ORM;

/**
* Categories
*
* @ORMTable()
*    @ORMEntity(repositoryClass="ApwBlackbullBundleEntityCategoriesRepository")
*/
class Categories
{
/**
 * @var integer
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORMColumn(name="categories_image", type="string", length=64, nullable = true)
 */
private $categoriesImage;

/**
 * @var integer
 *
 * @ORMColumn(name="parent_id", type="integer", nullable = true, options={"default":0})
 */
private $parentId;

/**
 * @var integer
 *
 * @ORMColumn(name="sort_order", type="integer", nullable = true, options={"default":0})
 */
private $sortOrder;

/**
 * @var DateTime
 *
 * @ORMColumn(name="date_added", type="datetime", nullable = true)
 */
private $dateAdded;

/**
 * @var DateTime
 *
 * @ORMColumn(name="last_modified", type="datetime", nullable = true)
 */
private $lastModified;

/**
 * @var boolean
 *
 * @ORMColumn(name="categories_status", type="boolean", nullable = true, options={"default" = 1})
 */
private $categoriesStatus;

/**
 * @ORMOneToMany(targetEntity="CategoriesDescription", mappedBy="category", cascade={"persist", "remove"})
 */
private $categoryDescription;

/**
 * @ORMManyToMany(targetEntity="Products", mappedBy="categories")
 **/
private $products;

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

/**
 * Set categoriesImage
 *
 * @param string $categoriesImage
 * @return Categories
 */
public function setCategoriesImage($categoriesImage)
{
    $this->categoriesImage = $categoriesImage;

    return $this;
}

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

/**
 * Set parentId
 *
 * @param integer $parentId
 * @return Categories
 */
public function setParentId($parentId)
{
    $this->parentId = $parentId;

    return $this;
}

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

/**
 * Set sortOrder
 *
 * @param string $sortOrder
 * @return Categories
 */
public function setSortOrder($sortOrder)
{
    $this->sortOrder = $sortOrder;

    return $this;
}

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

/**
 * Set dateAdded
 *
 * @param DateTime $dateAdded
 * @return Categories
 */
public function setDateAdded($dateAdded)
{
    $this->dateAdded = $dateAdded;

    return $this;
}

/**
 * Get dateAdded
 *
 * @return DateTime
 */
public function getDateAdded()
{
    return $this->dateAdded;
}

/**
 * Set lastModified
 *
 * @param DateTime $lastModified
 * @return Categories
 */
public function setLastModified($lastModified)
{
    $this->lastModified = $lastModified;

    return $this;
}

/**
 * Get lastModified
 *
 * @return DateTime
 */
public function getLastModified()
{
    return $this->lastModified;
}

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

/**
 * Add categoryDescription
 *
 * @param ApwBlackbullBundleEntityCategoriesDescription $categoryDescription
 * @return Categories
 */
public function addCategoryDescription(ApwBlackbullBundleEntityCategoriesDescription $categoryDescription)
{
    $this->categoryDescription[] = $categoryDescription;

    return $this;
}

/**
 * Remove categoryDescription
 *
 * @param ApwBlackbullBundleEntityCategoriesDescription $categoryDescription
 */
public function removeCategoryDescription(ApwBlackbullBundleEntityCategoriesDescription $categoryDescription)
{
    $this->categoryDescription->removeElement($categoryDescription);
}

/**
 * Get categoryDescription
 *
 * @return DoctrineCommonCollectionsCollection
 */
public function getCategoryDescription()
{
    return $this->categoryDescription;
}

/**
 * Add products
 *
 * @param ApwBlackbullBundleEntityProducts $products
 * @return Categories
 */
public function addProduct(ApwBlackbullBundleEntityProducts $products)
{
    $this->products[] = $products;

    return $this;
}

/**
 * Remove products
 *
 * @param ApwBlackbullBundleEntityProducts $products
 */
public function removeProduct(ApwBlackbullBundleEntityProducts $products)
{
    $this->products->removeElement($products);
}

/**
 * Get products
 *
 * @return DoctrineCommonCollectionsCollection
 */
public function getProducts()
{
    return $this->products;
}

/**
 * Set categoriesStatus
 *
 * @param boolean $categoriesStatus
 * @return Categories
 */
public function setCategoriesStatus($categoriesStatus)
{
    $this->categoriesStatus = $categoriesStatus;

    return $this;
}

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

Then I have this method in my controller for handle form submission:

<?php

namespace ApwBlackbullBundleController;


use ApwBlackbullBundleEntityCategories;
use ApwBlackbullBundleEntityCategoriesDescription;
use ApwBlackbullBundleFormCategoriesType;
use SymfonyBundleFrameworkBundleControllerController;
use SensioBundleFrameworkExtraBundleConfigurationRoute;
use SensioBundleFrameworkExtraBundleConfigurationTemplate;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentFormExtensionCoreChoiceListChoiceList;
use SensioBundleFrameworkExtraBundleConfigurationSecurity;


class CategoriesController extends Controller
{
   /**
 * @Security("has_role('ROLE_ADMIN')")
 * @Route("/createCategory")
 * @Template()
 */

public function createCategoryAction(Request $request){

    $category = new Categories();
    $categoryDesc = new CategoriesDescription();
    $category->addCategoryDescription($categoryDesc);
    $categoryDesc->setCategory($category);

    $form = $this->createForm(new CategoriesType(), $category);
    $form->handleRequest($request);

    if($form->isValid()){
        //exit(DoctrineCommonUtilDebug::dump($category));
        $em = $this->getDoctrine()->getManager();

        $em->persist($category);
        $em->persist($categoryDesc);
        $em->flush();

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

    return array(
        'form' => $form->createView()
    );
}

}

And finally this is my CategoryType.php:

<?php

namespace ApwBlackbullBundleForm;

use DoctrineORMEntityRepository;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolverInterface;

class CategoriesType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('categoryDescription', 'collection',
                array(
                    'type' => new CategoriesDescriptionType(),
                    'allow_add' => true,
                    'options' => array('data_class' => 'ApwBlackbullBundleEntityCategoriesDescription'),
                    'by_reference' => false,
                ))
            ->add('categoriesImage', null, array('label'=>'Foto:'))
            ->add('categoriesStatus', null, array('label'=>'Stato:'))
            ->add('parentId', 'entity', array( //provare a mettere una querybuiler
                                            'class'       => 'ApwBlackbullBundle:CategoriesDescription',
                                            'property'    => 'categoriesName',
                                            'empty_value' => 'Scegliere una categoria',
                                            'required'    => false,
                                            'label'       => 'Crea in:'))
            ->add('salva','submit')
            ->add('azzera','reset')
        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'ApwBlackbullBundleEntityCategories',
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'categories';
    }
}

When I try to save data I get this error:

An exception occurred while executing 'INSERT INTO Categories (categories_image, parent_id, sort_order, date_added, last_modified, categories_status) VALUES (?, ?, ?, ?, ?, ?)' with params ["as", {}, null, null, null, 1]:

Catchable Fatal Error: Object of class ApwBlackbullBundleEntityCategoriesDescription could not be converted to string

What I'm doing wrong?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You need to implement the __toString() method in your ApwBlackbullBundleEntityCategoriesDescription.

You could do:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...