Symfony3,缺少Doctrine \ ORM \ EntityRepository :: __ construct()的参数1,如何以及为什么

时间:2016-12-09 21:13:41

标签: php doctrine-orm symfony

我正在symfony创建我的第一个小应用程序,这是一个简单的博客。

现在我一直在使用symfony和doctrine的文档,并希望预先形成一个简单的初学者任务:显示一个json编码的简单表

但不知何故,我似乎无法与学说相处。

这是我的数据(除了显示值之外什么都不做的视图):

//AppBundle/Controller/DefaultController.php
<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use AppBundle\Entity\Post;
use Doctrine\Common\Persistence;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        $database = new Post();
        $output = $database->findAll();

        return $this->render('default/index.html.twig', [
            'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
            'x' => json_encode($output)
        ]);
    }
}


<?php
//AppBundle/Entity/Post.php

namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\EntityRepository;
/**
* @ORM\Entity
* @ORM\Table(name="sqltest")
*/
class Post extends EntityRepository
{
    //The post for now uses data from a temponary test table
    /**
    * @ORM\Column(type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
    * @ORM\Column(type="string", length=100)
    */
    private $name;

    /**
    * @ORM\Column(type="integer", scale=2)
    */
    private $number;



    /**
     * Get id
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     * @param string $name
     * @return Post
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set number
     * @param integer $number
     * @return Post
     */
    public function setNumber($number)
    {
        $this->number = $number;

        return $this;
    }

    /**
     * Get number
     * @return integer
     */
    public function getNumber()
    {
        return $this->number;
    }

}

问题是,当我尝试显示网站时,我得到了这个例外

  

警告:缺少参数1   Doctrine \ ORM \ EntityRepository :: __ construct(),调用   C:\ Users \用户阿兰\桌面\ symf,博客的\ src \的appbundle \控制器\ DefaultController.php   在第19行并定义

有问题的行是$database = new Post();

的行

我是新手,我知道响应非常简单,我只是看不到它。在回答时请提供even a dead rabbit可以理解的解释。

非常感谢您的耐心等待。

PS:关于我所见过的$em变量的解释是关于从哪里得到它将是好的

2 个答案:

答案 0 :(得分:2)

documentation中所述,您可以通过doctrine实体管理器访问自定义存储库类。

$em = $this->getDoctrine()->getManager();  
$posts = $em->getRepository('YourBundle:Post')->findAll();

此外,您正在将实体定义与您的存储库定义混合,这不是一个好主意。

请参阅doctrine documentation in symfony了解正确用法。

答案 1 :(得分:2)

如果您需要自定义数据库功能的存储库类,那么这是正确的方法:

namespace AppBundle\Entity;    
use Doctrine\ORM\EntityRepository;

class PostRepository extends EntityRepository
{
    public function findAll()
    {
        return $this->findBy(array(), array('id' => 'DESC', 'createdAt' => 'DESC'));
    }  
   ....
}

然后在你的控制器中:

$em = $this->getDoctrine()->getManager(); 
$entities = $em->getRepository("AppBundle:Post")->findAll();

删除注释(它们属于实体)。还要注意@james_bond告诉你的内容。试试吧!