3

我正在研究 symfony 2 框架。在我的示例应用程序中,我有 Blog 实体和 BlogEntry 实体。它们与一对多的关系相连。这是 BlogEntry 类:

class BlogEntry
{
    ....
    private $blog;
    ....
    public function getBlog()
    {
        return $this->blog;
    }

    public function setBlog(Blog $blog)
    {
        $this->blog = $blog;
    }
}

我想将方法​​ setBlogByBlogId 添加到 BlogEntry 类,我是这样看的:

public function setBlogByBlogId($blogId)
    {
        if ($blogId && $blog = $this->getDoctrine()->getEntityManager()->getRepository('AppBlogBundle:Blog')->find($blogId))
        {
            $this->setBlog($blog);
        }
        else
        {
            throw \Exception();
        }
    }

这是在模型课上获得学说的任何方法吗?从 Symfony 2 MVC 架构的角度来看,这是否正确?或者我应该在我的控制器中执行此操作?

4

1 回答 1

5

在尝试在 BlogEntry 实体上设置博客对象之前,您应该使用 blogId 查询存储库中的博客对象。

一旦你有了 blog 对象,你可以简单地在你的 BlogEntry 实体上调用 setBlog($blog)。

您可以在控制器中执行此操作,也可以创建一个博客服务(博客管理器)来为您执行此操作。我建议在服务中这样做:

在 Your/Bundle/Resources/config/services.yml 中定义您的服务:

services
    service.blog:
    class: Your\Bundle\Service\BlogService
    arguments: [@doctrine.orm.default_entity_manager]

你的/Bundle/Service/BlogService.php:

class BlogService
{

    private $entityManager;

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

    /*
     * @param integer $blogId
     *
     * @return Blog
     */
    public function getBlogById($blogId)

        return $this->entityManager
                    ->getRepository('AppBlogBundle:Blog')
                    ->find($blogId);
    }
}

然后在你的控制器中你可以简单地去:

$blogId = //however you get your blogId
$blogEntry = //however you get your blogEntry

$blogService = $this->get('service.blog');
$blog = $blogService->getBlogById($blogId);

$blogEntry->setBlog($blog);
于 2012-06-26T16:56:50.273 回答