Symfony2从另一个控制器调用控制器

时间:2014-02-10 13:23:41

标签: symfony

我是symfony2的新手,我一直在努力寻找从另一个内部调用控制器的最佳方法。

我有一个事件列表,我需要一个动作来获取所有事件和另一个动作以通过ID获取事件但我不想在每次需要时都不断重复学说调用。

我考虑过制作一个包含所有事件动作的控制器,然后在每次需要时从其他控制器中调用所需的动作,如果有更好的方法,我可以接受任何建议。

提前感谢。

1 个答案:

答案 0 :(得分:4)

如果你有一块应该重复使用的逻辑,它可能不属于控制器。您应该尝试将其移至服务,这很容易做到。

在src / BundleName / Resources / config / services.yml中:

services:
    service_name:
        class:        BundleName\Service\ServiceName
        arguments:    [@doctrine.orm.default_entity_manager]

然后,使用要重用的逻辑创建BundleName \ Service \ ServiceName类(as shown in the docs)。以下示例:

class ServiceName {

    protected $entityManager;

    public function __construct($entityManager) {
        $this->entityManager = $entityManager;
    }

    public function addProduct($product) {
        //Get the array, hydrate the entity and save it, at last.
        //...
        $entity = new Product();
        //...
        $this->entityManager->persist($entity);
        $this->entityManager->flush($entity);
        return $entity;

    }

}

然后,在您的操作中,只需拨打$this->get('service_name')->addProduct($array)或类似的内容。

当然,如果您希望重用控制器操作,you can use your controller as a service。不过,我建议你添加一个服务层。