我是symfony2的新手,我一直在努力寻找从另一个内部调用控制器的最佳方法。
我有一个事件列表,我需要一个动作来获取所有事件和另一个动作以通过ID获取事件但我不想在每次需要时都不断重复学说调用。
我考虑过制作一个包含所有事件动作的控制器,然后在每次需要时从其他控制器中调用所需的动作,如果有更好的方法,我可以接受任何建议。
提前感谢。
答案 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。不过,我建议你添加一个服务层。