我正在学习如何使用Symfony 2.5。但我有一些问题,我找不到答案。也许他们只与Symfony有关,但我不知道。 什么是:
答案 0 :(得分:1)
存储库 - http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#custom-repositories与实体有关,但您会了解存储库
服务 - http://symfony.com/doc/current/book/service_container.html
答案 1 :(得分:1)
以下是简要概述。文档更加详细,学习它的最佳方式是阅读文档并浏览一个从头到尾构建网站的教程。
假设您有一个名为Product的实体。这将是php中的一个对象,也是数据库中的一个表。表中的每一行都是一个单独的产品,您可以在实体php文件中定义它,如下所示:
<?php
// src/Company/ProductBundle/Entity/Product.php
namespace Company\ProductBundle\Entity;
/**
* @ORM\Entity(repositoryClass="Company\ProductBundle\Entity\ProductRepository")
*/
class Product
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=50)
*/
protected $type;
/**
* @ORM\Column(type="string", length=20)
*/
protected $color;
}
存储库 - 这是实体文件夹的子文件夹的命名约定,它将保存与特定实体相关的查询。每个实体都有一个存储库。存储库定义为:
// src/Company/ProductBundle/Entity/Repository/ProductRepository.php
namespace Company\ProductBundle\Entity\Repository;
use Doctrine\ORM\EntityRepository;
class ProductRepository extends EntityRepository
{
public function findProductByColor($args)
{
$color = $args['color'];
$qb = $this->createQueryBuilder('p')
->orderBy('p.type', 'ASC')
->where('p.color = ?1')
->setParameter(1, $color);
return $qb->->getQuery()->getResult();
}
}
可以使用实体管理器在控制器中调用它:
$result = $em->getRepository('AcmeBundle:Product')->
findProductByColor(array('color' => $color);
这个问题是在控制器中创建批量,因为您需要定义实体管理器并且可能导致控制器中的更多操作,并且还需要在控制器中包含实体的“使用”行。这就是服务的来源。
服务 - 在上面的示例中,您需要使用控制器中的实体管理器来加载特定的Product集合,这不是首选方法。业务逻辑不应该驻留在控制器中,这就是服务变得更受欢迎的原因。服务是创建php对象的全局方式。
创建服务后,您可以通过在控制器中使用类似的东西进行简单调用,或者需要访问此实体的任何其他文件来调用它:
$redproducts = $$this->get('products_red');
要创建服务,请查看symfony docs here。
容器 - 我认为您指的是服务容器或依赖注入容器,也称为DIC。它是Symfony中的一个特殊对象,它管理应用程序内部服务的实例化。只有一个,所有服务都在其中。您不会创建容器,特别是如果您是新的并且不创建其他将使用的包。详细了解service container here。