Symfony 3.3在数据库中持久保存值时出错

时间:2017-11-30 16:54:22

标签: symfony doctrine

我正在尝试使用doctrine将一个简单的对象持久化到数据库中。

相反,我得到字符串(83)"The class 'AppBundle\Entity\User' was not found in the chain configured namespaces "

我做了什么:

  • 几乎跟着Symfony的文档。
  • 成功设置我的Symfony Enviorment。使用doctrine创建数据库。
  • 使用Doctrine
  • 在AppBundle \ Entity中添加实体并生成表格
  • 添加了一段代码以将我的实体持久化到db

user.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:############################################ ###############

我已经在我的本地机器上直接尝试了它,它运行正常 似乎我的码头工作环境遇到了一些麻烦,可能没有正确设置

编辑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); =&GT; $ kernel = new AppKernel('prod',true);

这将启用“调试模式”。一切都像现在的魅力。显然,“解决方案”感觉很脏,而且只是暂时的。

如果有人知道造成这种行为的原因,请告诉我们。

2 个答案:

答案 0 :(得分:0)

通常在链配置的命名空间中找不到“类'您的限定类名'的错误”意味着您遇到了命名空间和路径不匹配的问题。检查您的命名空间或检查该类所在的实际目录并确保它们匹配。

请参阅Symfony error The class XXX was not found in the chain configured namespaces XXX

另外Symfony2 - The class 'X' was not found in the chain configured namespaces

答案 1 :(得分:0)

只需将此行添加到默认控制器即可,

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

但请在作曲家更新之前 生成实体和架构更新