在symfony 2應用程序中訪問實體內部配置值的最佳方式是什麼?在symfony 2實體中訪問配置值
我搜索關於這個,我已經找到了兩個解決方案:
- 定義實體的服務和注入服務容器訪問配置值
- 而this approach,用以定義一個類使用靜態方法獲得參數值的實體的相同束
是否有任何其他解決方案?什麼是最好的解決方法?
在symfony 2應用程序中訪問實體內部配置值的最佳方式是什麼?在symfony 2實體中訪問配置值
我搜索關於這個,我已經找到了兩個解決方案:
是否有任何其他解決方案?什麼是最好的解決方法?
您不應該在您的實體中需要配置。
例如,您有File
實體,您需要將此實體表示的文件保存到磁盤。你需要一些參數,比如說「upload_dir」。您可以將此參數以某種方式傳遞給實體,並在此實體內定義一個方法,該方法保存要上傳目錄的文件。但更好的方法是創建一個服務來負責保存文件。然後你可以注入配置,並在save
方法中傳遞實體對象作爲參數。
雖然我會找到一個'FileEntity :: getUploadDir()'方法,非常方便... –
除了關聯的實體之外,您的實體不應該真正訪問其他任何內容。它不應該與外界真正有任何聯繫。
做你想做的一種方法是使用訂閱者或偵聽器來偵聽實體加載事件,然後使用通常的setter將該值傳遞給實體。
例如....
你的實體
namespace Your\Bundle\Entity;
class YourClass
{
private $parameter;
public function setParameter($parameter)
{
$this->parameter = $parameter;
return $this;
}
public function getParameter()
{
return $this->parameter;
}
...
}
監聽
namespace Your\Bundle\EventListener;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Your\Bundle\Entity\YourEntity;
class SetParameterSubscriber implements EventSubscriber
{
protected $parameter;
public function __construct($parameter)
{
$this->parameter = $parameter;
}
public function getSubscribedEvents()
{
return array(
'postLoad',
);
}
public function postLoad(LifecycleEventArgs $args)
{
/** @var YourEntity $entity */
$entity = $args->getEntity();
// so it only does it to your YourEntity entity
if ($entity instanceof YourEntity) {
$entity->setParameter($this->parameter);
}
}
}
你的服務文件。
parameters:
your_bundle.subscriber.set_parameter.class:
Your\Bundle\EventListener\SetParameterSubscriber
// Should all be on one line but split for readability
services:
your_bundle.subscriber.set_parameter:
class: %your_bundle.subscriber.set_parameter.class%
arguments:
- %THE PARAMETER YOU WANT TO SET%
tags:
- { name: doctrine.event_subscriber }
你是指哪種配置?它是數據庫配置還是基於您提供的鏈接,它是一些全局配置值? – Javad
這是一個在parameters.yml中定義的字符串參數值。我試過第二種解決方案,它工作正常。雖然我不知道這是否是最好的方法,但在我提到的2之間它看起來是最好的。 –