【发布时间】:2018-05-14 16:29:04
【问题描述】:
我正在尝试使用教义将一个简单的对象持久化到数据库中。
相反,我得到的是 string(83) "The class 'AppBundle\Entity\User' was not found in the chain configured namespaces "
我做了什么:
- 在这方面非常关注 Symfony 文档。
- 成功设置我的 Symfony 环境。使用教义创建数据库。
- 在 AppBundle\Entity 中添加实体并使用 Doctrine 生成表
- 添加了一段代码以将我的实体保存到 db
用户.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="user")
*/
class User
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
private $username;
...
DefaultController.php
...
/**
* @Route("/", name="homepage")
* @param Request $request
* @return Response
*/
public function indexAction(Request $request)
{
$manager = $this->getDoctrine()->getManager();
$user = new User();
$user->setUsername('jiro');
$user->setPassword('fantozzi');
try{
$manager->persist($user);
$manager->flush();
}catch (\Exception $exception){
var_dump($exception->getMessage());
}
return new Response("<h1>It works</h1>");
}
...
config.yml
doctrine:
dbal:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
编辑 0:########################################### ###############
我已经在本地机器上直接尝试过,效果很好 看来我的 docker 环境有些问题可能没有正确设置
编辑1:########################################### ##################
我可以确认我的 docker 环境是正确的。仍然可能以某种方式导致这种情况。另一个细节是,我的真机是带有 Sierra Os 的 Mac(我认为这并不重要,但你永远不知道)。
经过一番挖掘,我发现其他人也遇到了这种情况。
Cannot load entity: "class" was not found in the chain configured
Doctrine cannot map entity/repository namespace in chain
长话短说,我在 app.php 中更改了这一行
$kernel = new AppKernel('prod', false); => $kernel = new AppKernel('prod', true);
这将启用“调试模式”。现在一切都像魅力一样。显然,“解决方案”感觉很脏,而且只是暂时的。
如果有人知道是什么导致了这种行为,请告诉。
【问题讨论】: