例如,我有算法函数,它计算特定的哈希码.函数本身是300多行代码.我需要在我的捆绑包中的许多不同控制器中多次使用该功能.我可以在哪里存储calculate_hash()我的捆绑使用它?我可以从其他捆绑包中访问它吗?我还可以编写calculate_hash()可以访问实体管理器的全局吗?
在这里找不到我的答案.
Mat*_*att 43
在Symfony2世界中,这显然属于服务.事实上,服务是与依赖注入容器绑定的普通类.您可以为它们注入所需的依赖项.例如,假设函数所在的类calculate_hash是AlgorithmicHelper.该服务拥有"全球"功能.你定义你的类是这样的:
namespace Acme\AcmeBundle\Helper;
// Correct use statements here ...
class AlgorithmicHelper {
private $entityManager;
public function __construct(EntityManager $entityManager) {
$this->entityManager = $entityManager;
}
public function calculate_hash() {
// Do what you need, $this->entityManager holds a reference to your entity manager
}
}
Run Code Online (Sandbox Code Playgroud)
然后需要让这个类知道symfony dependecy容器.为此,您可以app/config/config.yml通过添加如下service部分来定义文件中的服务:
services:
acme.helper.algorithmic:
class: Acme\AcmeBundle\Helper\AlgorithmicHelper
arguments:
entityManager: "@doctrine.orm.entity_manager"
Run Code Online (Sandbox Code Playgroud)
服务ID就在服务的下方.例如,它用于在控制器中检索您的服务.之后,指定服务的类,然后指定传递给类的构造函数的参数.的@符号表示传递到id的服务的引用doctrine.orm.entity_manager.
然后,在您的控制器中,您执行类似这样的操作来检索服务并使用它:
$helper = $this->get('acme.helper.algorithmic');
$helper-> calculate_hash();
Run Code Online (Sandbox Code Playgroud)
请注意,调用的结果$this->get('acme.helper.algorithmic')将始终返回相同的帮助程序实例.这意味着,默认情况下,服务是唯一的.就像有一个单身人士一样.
有关详细信息,请您阅读Symfony2 一书.检查这些链接
希望能帮助到你.
问候,
马特
| 归档时间: |
|
| 查看次数: |
13684 次 |
| 最近记录: |