如果要使用现有数据库中的实体自动生成功能, 则可能需要使用symfony中的doctrine:generate:crud命令自动创建CRUD。
Symfony和学说使你可以通过自动方式从数据库表中的先前生成实体创建路线和表单的方式来缩短开发时间。此功能确实派上用场, 但是它并不完善, 并且在开发过程中可能会出现错误。
这些已知问题之一是Class无法转换为string:
可捕获的致命错误:无法将类myBundle \ Entity \ myClass的对象转换为字符串500 Internal Server Error-ContextErrorException
如前所述, 如果你使用crud命令使用表单的自动化功能, 则可能是由你自己的无法显式转换为字符串的实体引起的。 “非常清晰易懂”不是吗?
这是什么意思, 我该如何解决
如果你是实施方面的新手, 那么你可能对解决问题的想法不甚了解, 但是不用担心, 你将在几秒钟内对其进行修复, 并理解它为什么会发生。
考虑以下示例和外交关系:
类别 | 子类别 |
id | id |
名称 | 名称 |
category_id |
子类别寄存器需要一个category_id作为其字段之一, 只能从类别表中获得一个简单的外键关系。
但这不是重点, 重点是自动生料如何生成表格!这就是错误发生的时间。该表格将被完美地创建, 理论上应如下所示:
但是, 由于子类别表单的select元素无法呈现, 并且将引发可捕获的致命错误异常, 因为Category实体文件不知道应该在select中显示哪个字段, 并且它既未提供又未提供__toString()魔术方法, 用于手动定位字段。
因此, 如果我们进入捆绑包中的类别(或项目中存在问题的类)实体文件, 则该类应类似于:
<?php
namespace myBundle\Entity;
/**
* Category
*/
class Category
{
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $name;
/**
* @var string
*/
private $description;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Category
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set description
*
* @param string $description
*
* @return Category
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* Generates the magic method
*
*/
public function __toString(){
// to show the name of the Category in the select
return $this->name;
// to show the id of the Category in the select
// return $this->id;
}
}
要解决此问题, 请将__toString方法添加到需要在Select输入中显示的类中, 在本例中为Category实体, 如上一片段所示。
现在尝试加载引发错误的路线, 并查看select输入如何正确呈现, 玩得开心!
评论前必须登录!
注册