【发布时间】:2017-02-24 22:26:19
【问题描述】:
我在 DiTest 命名空间下有几个示例类;
namespace DiTest;
class Transport
{
public function send($mail)
{
echo $mail . PHP_EOL;
echo 'Mail Sent';
}
}
class Mailer
{
protected $transport;
public function __construct(Transport $transport)
{
$this->transport = $transport;
}
public function send($mail)
{
if ($this->transport) {
$this->transport->send($mail);
} else {
echo 'No transport set!' . PHP_EOL;
}
}
}
然后我有这个 yaml 配置文件;
services:
transport:
class: DiTest\Transport
mailer:
class: DiTest\Mailer
autowire: true
最后我在 index.php 中有这个
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
require_once __DIR__.'/vendor/autoload.php';
$container = new ContainerBuilder();
$loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '\src'));
$loader->load('services.yml');
$mailer = $container->get('mailer');
$mailer->send('Hello world!');
它尝试在不传入构造函数参数的情况下实例化 Mailer 类。谁能告诉我哪里出错了。
我们应该如何调试自动装配问题?
【问题讨论】:
-
我可以回答最后一个问题:通过不使用自动装配来调试自动装配。您使用的是 S2.8 吗?
-
我认为 autowire 应该只用于快速原型设计。我只使用依赖注入、配置和 yaml。它们都是 3.2 版本。我只是想看看 symfony 的 di 容器是如何工作的。
标签: php symfony dependency-injection autowired