[英]Symfony2 Dependency Injection with parent services does not work
我正在嘗試配置我的Symfony依賴注入,以便我能夠使用父服務。 按照我在http://symfony.com/doc/current/components/dependency_injection/parentservices.html中找到的描述,我嘗試將以下類設置為第一個測試:
Mailer.php:
namespace testing;
class Mailer
{
private $transport;
public function __construct($transport) {
$this->transport = $transport;
}
public function getTransport() {
return $this->transport;
}
}
MailManager.php:
namespace testing;
abstract class MailManager
{
protected $mailer;
public function setMailer(Mailer $mailer)
{
$this->mailer = $mailer;
}
}
NewsletterManager.php:
namespace testing;
class NewsletterManager extends MailManager {
function getTransport() {
return $this->mailer->getTransport();
}
}
services.yml:
parameters:
mailer.transport: sendmail
services:
mailer:
class: testing\Mailer
arguments: [%mailer.transport%]
mail_manager:
class: testing\MailManager
abstract: true
calls:
- [ setMailer, [ @mailer ] ]
newsletter_manager:
class: testing\NewsletterManager
parent: mail_manager
但是當我嘗試使用以下代碼運行此配置時:
require_once 'ClassLoading.php';
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\DependencyInjection\ContainerBuilder;
$container = new ContainerBuilder();
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/config'));
$loader->load('services.yml');
$nm = $container->get('newsletter_manager');
echo $nm->getTransport();
我總是得到這個錯誤:
PHP Fatal error: Call to a member function getTransport() on a non-object in C:\IGMI\workspace\TryingHard\loading\NewsletterManager.php on line 7
有一點似乎是抽象類的setter永遠不會被調用,但即使我使抽象類具體化並從實際調用setter的容器中檢索它,這也無法解決郵件程序對象的問題沒有設定。 所以它告訴我,建立子類關系也存在問題。
任何幫助,將不勝感激!
您應該在嘗試訪問服務之前編譯容器構建器我認為...所以它應該如下所示:
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\DependencyInjection\ContainerBuilder;
$container = new ContainerBuilder();
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/config'));
$loader->load('services.yml');
$container->compile(); //add this line
$nm = $container->get('newsletter_manager');
echo $nm->getTransport();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.