1
我目前正试图配置我的Symfony的依赖注入,使我能够使用父服务。继我在http://symfony.com/doc/current/components/dependency_injection/parentservices.html发现描述我试图建立以下类别为第一个测试:Symfony2的依赖注入与母公司业务不工作
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
有一两件事似乎是的二传手抽象类是从来没有所谓的,但即使我做了抽象类混凝土和从与二传居然被称为容器检索,这并没有解决邮件对象的问题被未设置。所以它表明,建立子类关系也存在问题。
任何帮助,将不胜感激!
非常感谢,这解决了我的问题!在本教程的基本组成部分无处提到的编译,一切运行良好,没有它之前...对于那些有兴趣谁还有这个单独的一章:http://symfony.com/doc/current/components /dependency_injection/compilation.html – 2012-07-11 13:28:30
有人能告诉我在哪里把$容器 - >编译()? 难道是MyBundleExtension? – 2014-07-07 22:00:09
的Symfony标准版编译容器,所以如果你有喜欢的扩展MyBundleExtension(所以你用Symfony的;))你还没有做到这一点 – l3l0 2014-07-09 18:51:08