【问题标题】:Symfony 3.3 Error persisting values in the databaseSymfony 3.3 在数据库中持久化值时出错
【发布时间】: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);

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

如果有人知道是什么导致了这种行为,请告诉。

【问题讨论】:

    标签: symfony doctrine


    【解决方案1】:

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

    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

    【讨论】:

    • 谢谢。在发布我的问题之前,我查看了您提供的链接。命名和位置是正确的,正如 Symfony 所期望的那样,并且可以在此处看到 github.com/victortodoran/MobileApi 。这就是使异常变得奇怪的原因。
    【解决方案2】:

    只需将此行添加到您的默认控制器,它应该可以工作

    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    

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

    【讨论】:

    • 感谢您的回答。这是行不通的。你的答案背后的逻辑是什么?包含一个类如何改变上述行为。从逻辑的角度来看,这没有任何意义。
    • 我确实克隆了你的项目,我得到的唯一错误是根据上面的解决方案解决的
    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 2014-05-23
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2017-08-09
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多