2017-06-07 95 views
0

我試着從我的控制器中調用一個函數並將$ todolist返回給我的控制器。但是,我得到這個錯誤,當我離開控制器內的這個功能,它工作正常,但我不希望它在控制器中。

這是我的控制器

namespace AppBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\route; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

use AppBundle\Entity\Todo; 
use AppBundle\Model\TodoModel; 

class TodoController extends Controller 
{ 
    /** 
    * @Route("/", name="homepage") 
    */ 
    public function ShowList() 
    { 
     $todolist = TodoModel::getTodolist(); 

     $html = $this->container->get('templating')->render(
      'todolist/todolist.html.twig', 
      array('todolist' => $todolist) 
     ); 

     return new response($html); 
    } 
} 

這是我的模型

namespace AppBundle\Model; 

use AppBundle\Entity\Todo; 

class TodoModel 
{ 

    public function getTodolist() 
    { 
     $repository = $this->getDoctrine() 
      ->getRepository('AppBundle:Todo'); 
     $todolist = $repository->findAll(); 
     return $todolist; 
    } 

} 

回答

1

權的方式來做到這一點是:

public function ShowList() 
{ 
    $entityManager = $this->get('doctrine.orm.entity_manager'); 
    $repository = $entityManager->getRepository(Todo::class); 
    $todolist = $repository->findAll(); 

    $html = $this->container->get('templating')->render(
     'todolist/todolist.html.twig', 
     array('todolist' => $todolist) 
    ); 

    return new Response($html); 
} 

如果你想要做的某種抽象與「TODO提供商」,然後更好地命名它爲TodoProvider,而不是TodoModel

它應該是這樣的:

namespace AppBundle\Todo; 

use Doctrine\ORM\EntityManager; 
use AppBundle\Entity\Todo; 

class TodoProvider 
{ 
    /** 
    * @var EntityManager 
    */ 
    private $entityManager; 

    /** 
    * TodoProvider constructor. 
    * @param EntityManager $entityManager 
    */ 
    public function __construct(EntityManager $entityManager) 
    { 
     $this->entityManager = $entityManager; 
    } 

    /** 
    * @return Todo[] 
    */ 
    public function getAllTodos() 
    { 
     return $this->entityManager->getRepository(Todo::class)->findAll(); 
    } 
} 

然後註冊TodoProvider作爲服務(http://symfony.com/doc/current/service_container.html)和控制器得到$this->get('my_todo_provider')

相關問題