Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 服务容器如何创建services.yml中声明的对象?_Dependency Injection_Symfony - Fatal编程技术网

Dependency injection 服务容器如何创建services.yml中声明的对象?

Dependency injection 服务容器如何创建services.yml中声明的对象?,dependency-injection,symfony,Dependency Injection,Symfony,考虑以下代码: public function showActiveJobsAction($slug) { $em = $this->getDoctrine()->getEntityManager(); $category = $em->getRepository('JobeetBundle:Category')->findBySlug($slug); if (! $category) { throw $this->cr

考虑以下代码:

public function showActiveJobsAction($slug)
{
     $em = $this->getDoctrine()->getEntityManager();
     $category = $em->getRepository('JobeetBundle:Category')->findBySlug($slug);
     if (! $category) {
        throw $this->createNotFoundException('Unable to find Category entity.');
     }

     $jobService = $this->container->get('job_service');
     $category = $jobService->populateCategoryByItsActiveJobs($category);

     return $this->render('JobeetBundle:Category:jobs.html.twig', array(
        'category'      => $category,
    ));        
}
job_服务需要JobeetBundle:类别存储库才能工作。存储库被传递给服务构造函数。这些都是在services.yml中定义的

所以在本例中,我得到了JobeetBundle的两个实例:Category repository类

如果是,我如何更改我的设计以使其更好

可能最好像这样创建代码:

$jobService->getCatetoryWithActiveJobsByItsSlug($slug)

但我仍然想知道容器在创建对象之前是否会查找对象存在?

一般来说,在Symfony2中不会得到重复的存储库(或服务),所以不用担心

这:


是一种更好的方法,因为它对控制器隐藏了实体管理器/存储库的内容。您可以(至少在理论上)将整个Doctrine2引擎替换为其他引擎,并且仍然可以使用控制器代码。

一般来说,您不会在Symfony2中获得重复的存储库(或服务),因此无需担心

这:


是一种更好的方法,因为它对控制器隐藏了实体管理器/存储库的内容。您可以(至少在理论上)将整个Doctrine2引擎与其他引擎交换,并且仍然可以使用控制器代码。

当您从容器中获得服务时,默认情况下,您总是得到相同的实例。当这个服务被注入另一个服务时,它也是同一个实例

因此,您不必担心两个问题,您只会得到一个服务实例
job\u服务

以下是摘自:

另外,邮件服务只创建一次,每次请求该服务时都返回相同的实例。这几乎总是您需要的行为(它更灵活、更强大)


希望有帮助

当您从容器中获得服务时,默认情况下,您总是得到相同的实例。当这个服务被注入另一个服务时,它也是同一个实例

因此,您不必担心两个问题,您只会得到一个服务实例
job\u服务

以下是摘自:

另外,邮件服务只创建一次,每次请求该服务时都返回相同的实例。这几乎总是您需要的行为(它更灵活、更强大)

希望有帮助

$jobService->getCatetoryWithActiveJobsByItsSlug($slug)