Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony 3 Object of class could not be converted to string

I'm have this address form. Everything is working as expected, until I added a drop down selection field for the cities. I'm getting this error when I try to save the form:

Catchable Fatal Error: Object of class AppBundle\Entity\Address could not be converted to string

The docs say that the EntityType field is designed to load options from a Doctrine entity.

This is the form:

 $builder
             ->add('cities', EntityType::class, array(
                'class' => \AppBundle\Entity\Cities::class,
                'choice_label' => 'cityname',
                'choice_value' => 'cityid')
            )

And this is my entity

 /**
 * @var string
 * 
 * @ORM\Column(name="cities", type="string", length=55, nullable=false)
 */
private $cities;   

And setters/getters:

 /**
 * Set cities
 *
 * @param string $cities
 *
 * @return Address
 */
public function setCities($cities)
{
    $this->cities = $cities;

    return $this;
}

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

I also added this:

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

And had this result:

Catchable Fatal Error: Method AppBundle\Entity\Address::__toString() must return a string value

like image 458
Dani California Avatar asked Jan 19 '26 15:01

Dani California


2 Answers

You should implement __toString() method for you Entity:

__toString() allows a class to decide how it will react when it is treated like a string. For example, what echo $obj; will print. This method must return a string, as otherwise a fatal E_RECOVERABLE_ERROR level error is emitted.

For example, you could write something like this to represent your class as a string:

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

More info about this magic method here.

like image 71
Azuloo Avatar answered Jan 22 '26 05:01

Azuloo


That error means that your toString method is returning something other than a string (possibly an array going by the name?). You might want to try inspecting the data to identify what data type it is.

Better than using toString though is the choice_label option - this tells Symfony what property from the entity should be mapped to the label.

like image 34
Graeme Chapman Avatar answered Jan 22 '26 06:01

Graeme Chapman



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!