代码之家  ›  专栏  ›  技术社区  ›  Manuchekhr

语义错误类“Blog”未定义Symfony 4

  •  2
  • Manuchekhr  · 技术社区  · 7 年前

    我有以下代码:

    namespace App\Controller;
    use Symfony\Component\HttpFoundation\Request;
    use App\Entity\Blog;
    
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Doctrine\ORM\Tools\Pagination\Paginator;
    
    class BlogController extends Controller
    {
        /**
         * @Route("/blog", name="blog")
         */
        public function index()
        { 
            $entityManager=$this->getDoctrine()->getManager();
    
            $blog = $this->getDoctrine()->getRepository(Blog::class);
            $dql = "SELECT id, name  FROM Blog";
            $query = $entityManager->createQuery($dql)
                               ->setFirstResult(0)
                               ->setMaxResults(100);
    
            $paginator = new Paginator($query, $fetchJoinCollection = true);
    
            $c = count($paginator);
            foreach ($paginator as $post) {
                echo $post->getHeadline() . "\n";
            }
    
            return $this->render('blog/index.html.twig', [
                'controller_name' => 'BlogController',
                'blog' =>$blog,
            ]);
        }
    }
    

    但当我运行它时

    [语义错误]第0行,第22列“Blog”附近:错误:类“Blog”为 未定义。 我也试过放

     $dql = "SELECT id, name  FROM App\Entity\Blog:Blog";
    

    但这样的话

    [语法错误]第0行第37列:错误:应为 条令\ORM\Query\Lexer::T\u标识符,get“:Blog”

    我不知道该怎么办。请帮帮我

    2 回复  |  直到 7 年前
        1
  •  3
  •   Alex    7 年前

    正确的DQL查询应该如下所示:

    SELECT blog.id, blog.name FROM App\Entity\Blog blog
    

    这个 DQL documentation 应该从那里帮助你。

        2
  •  1
  •   Val    7 年前

    升级到S4并重构代码后,我遇到了相同的问题,但能够确定根本原因。

    我的代码如下所示

    public function loadUserByUsername($username)
    {
        $select = "SELECT u";
        $from = " FROM App\Vk\UsrBundle\Entity\vUser u";   // <- Note the fully qualified path to the class definition.
        $join = "";
        $where = " WHERE u.username = '$username'";
    
        $query_string = $select . $from . $join . $where;
        $query = $this->em->createQuery($query_string);
        dump($query); die();                                // <- Dump $query to check how it looks
        $v_user = $query->getResult()[0];       
    
        if (isset($v_user))
            return $v_user;
    
        throw new UsernameNotFoundException(
            sprintf('Username "%s" does not exist.', $username)
        );
    }
    

    我的查询看起来不正确,系统将“\v”作为一个值。 view dump output

    添加另一个反斜杠以屏蔽“\v”中的反斜杠解决了此问题。查询成功之后,错误消失了。

    $from = " FROM App\Vk\UsrBundle\Entity\\vUser u";
    

    不确定这是否与您的根本原因完全相同,但这可能有助于调查。