[英]Symfony2 global functions
例如,我有算法函數,它計算特定的哈希碼。 函數本身是300多行代碼。 我需要在我的捆綁包中的許多不同控制器中多次使用該功能。 我在哪里可以存儲我的calculate_hash()
以在我的捆綁中使用它? 我可以從其他捆綁包中訪問它嗎? 我還可以編寫可以訪問實體管理器的全局calculate_hash()
嗎?
在這里找不到我的答案。
在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
}
}
然后需要讓這個類知道symfony dependecy容器。 為此,您可以通過添加如下所示的service
部分在app/config/config.yml
文件中定義服務:
services:
acme.helper.algorithmic:
class: Acme\AcmeBundle\Helper\AlgorithmicHelper
arguments:
entityManager: "@doctrine.orm.entity_manager"
服務ID就在服務的下方。 例如,它用於在控制器中檢索您的服務。 之后,指定服務的類,然后指定傳遞給類的構造函數的參數。 @
notation表示傳遞對id為doctrine.orm.entity_manager
的服務的引用。
然后,在您的控制器中,您執行類似這樣的操作來檢索服務並使用它:
$helper = $this->get('acme.helper.algorithmic');
$helper-> calculate_hash();
請注意,調用$this->get('acme.helper.algorithmic')
將始終返回輔助對象的相同實例。 這意味着,默認情況下,服務是唯一的。 就像有一個單身人士一樣。
有關詳細信息,請您閱讀Symfony2 一書 。 檢查這些鏈接
希望能幫助到你。
問候,
馬特
Braian在評論中詢問了Symfony 3的答案,所以這里有一個Symfony 3。3 (2017年5月發布):
namespace Acme\AcmeBundle\Helper;
use Doctrine\ORM\EntityManager;
final class AlgorithmicHelper
{
/**
* @var EntityManager
*/
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function calculateHash()
{
// Do what you need, $this->entityManager holds a reference to your entity manager
}
}
# app/config/services.yml
services:
_defaults: autowire # this enabled constructor autowiring for all registered services
Acme\AcmeBundle\Helper\AlgorithmicHelper: ~
use Acme\AcmeBundle\Helper\AlgorithmicHelper;
class SomeController
{
/**
* @var AlgorithmicHelper
*/
private $algorithmicHelper;
public function __construct(AlgorithmicHelper $algorithmicHelper)
{
$this->algorithmicHelper = $algorithmicHelper;
}
public function someAction()
{
// some code
$hash = $this->algorithmicHelper->calculateHash();
// some code
}
}
您可以在以下兩篇文章中閱讀有關Symfony 3.3依賴注入(在這種情況下在配置中注冊服務並在控制器中使用它)的新聞:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.