我自横刀向天笑,去留肝胆两昆仑。这篇文章主要讲述可捕获的致命错误:类Proxies的对象 __ CG __AppBundleEntityModelo无法转换为字符串相关的知识,希望能为你提供帮助。
我从Symfony 3和EasyAdminBundle开始。我的问题是当我尝试使用外键编辑或创建实体时,我得到一个异常:
“可捕获的致命错误:类代理的对象_CG __AppBundleEntityModelo无法转换为字符串500内部服务器错误 -ContextErrorException”在vendorsymfonysymfonysrcSymfonyBridgeDoctrineFormTypeDoctrineType.php中在第59行
public static function createChoiceLabel($choice)
{
return (string) $choice;
}
VehiculoType.php
namespace AppBundleForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
class VehiculoType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->
add('patente')->
add('modelo', 'entity');
}/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->
setDefaults(array(
'data_class' =>
'AppBundleEntityVehiculo'
));
}/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'appbundle_vehiculo';
}
public function __toString()
{
return (string) $this->
getVehiculo();
}}
和我的实体Vehiculo.php
namespace AppBundleEntity;
/*** Vehiculo*/
class Vehiculo{
/**
* @var int
*/
private $id;
/**
* @var string
*/
private $patente;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->
id;
}/**
* Set patente
*
* @param string $patente
*
* @return Vehiculo
*/
public function setPatente($patente)
{
$this->
patente = $patente;
return $this;
}/**
* Get patente
*
* @return string
*/
public function getPatente()
{
return $this->
patente;
}
/**
* @var string
*/
private $oneToOne;
/**
* Set oneToOne
*
* @param string $oneToOne
*
* @return Vehiculo
*/
public function setOneToOne($oneToOne)
{
$this->
oneToOne = $oneToOne;
return $this;
}/**
* Get oneToOne
*
* @return string
*/
public function getOneToOne()
{
return $this->
oneToOne;
}
/**
* @var AppBundleEntityModelo
*/
private $modelo;
/**
* Set modelo
*
* @param AppBundleEntityModelo $modelo
*
* @return Vehiculo
*/
public function setModelo(AppBundleEntityModelo $modelo = null)
{
$this->
modelo = $modelo;
return $this;
}/**
* Get modelo
*
* @return AppBundleEntityModelo
*/
public function getModelo()
{
return $this->
modelo;
}
}
答案【可捕获的致命错误(类Proxies的对象 __ CG __AppBundleEntityModelo无法转换为字符串)】你的
modelo
字段应该定义choice_label选项,以便正确显示允许识别实体的东西:$builder->
add('patente')->
add('modelo', 'entity', [
'choice_label' =>
'name'
]);
将
name
替换为Modelo
实体实现的属性。另一答案您需要覆盖实体中的__toString()方法。
easyAdmin包试图向您显示在“新建”和“编辑”视图中映射的实体。但它不知道如何展示它。
只需将以下内容添加到您的实体就可以解决它(如果另一个字符串更有意义,您可以替换patente):
public function __toString()
{
return $this->
patente;
}
推荐阅读
- 在ASP.NET MVC App中初始化AutoMapper v6时出错
- 使用appcmd添加新的网站问题
- 根据PC更改app.config连接字符串
- 当文件实际引用v10时,找不到v11.0WebApplicationsMicrosoft.WebApplication.targets
- 如何在Android中做像Combobox这样的“东西”()
- 如何在android studio 3中使用photoview 2.0.0
- 滚动带有ScrollController的CustomScrollView时,SliverAppbar仍然可见
- 如何使用USB和EFI Shell格式化Windows 10的Medion Akoya S2218笔记本电脑
- 使用TestOps优化来升级DevOps软件管道