Внедрение интерфейса с Silex

Я пытаюсь реализовать interface injection с Silex\Application,
У меня есть мой начальный загрузчик в одном файле PHP, обратите внимание, это упрощено без интерфейсов на самом деле:

$app = new Silex\Application();
$app->register(
new ServiceProvider($app)
);

$app['testme'] = function() {
throw new Exception('I am invoked');
};

$app->run();

И у меня есть ServiceProvider:

class ServiceProvider implements ServiceProviderInterface
{
public function register(Application $app) {
foreach ($app as $key => $val) {
if ($key == 'testme') {
throw new Exception('it works!');
}
}
}
}

Первое исключение не должно быть выброшено, но я ожидал, что второе сработает.

Почему вышеупомянутое не работает, и где может быть место в Silex для добавления конфигурации в интерфейсы в соответствии с $app[....] instanceof MyAwareInterface ?

1

Решение

Ваш пример обновлен с помощью Silex IOC и моих плохих знаний о внедрении интерфейса:

$app = new Silex\Application();

$app->register(
new ServiceProvider($app)
);

$app['testme'] = function() {
return new ThisObjectImplementsMyInterface();
};

$app->run();

И у меня есть ServiceProvider:

class ServiceProvider implements ServiceProviderInterface{
public function register(Application $app) {
$app['configure.interface'] = function() use ($app) {
foreach ($app as $val) {
if ($val instanceOf 'MyInterface') {
$val->configureInterfaceMethod($app['param1'], $app['param2'] /*, ...*/);
}
}
}
}

public function boot(Application $app) {
$app['configure.interface'];
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]