Skip to content

Commit 95b5869

Browse files
committed
ContainerBuilder: added check that accessor have no setup
1 parent 3da6055 commit 95b5869

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

src/DI/ContainerBuilder.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,8 @@ private function resolveImplement(ServiceDefinition $def, $name)
423423
if ($rc->hasMethod('get')) {
424424
if ($method->getParameters()) {
425425
throw new ServiceCreationException("Method $methodName used in service '$name' must have no arguments.");
426+
} elseif ($def->getSetup()) {
427+
throw new ServiceCreationException("Service accessor '$name' must have no setup.");
426428
}
427429
if (!$def->getEntity()) {
428430
$def->setFactory('@\\' . ltrim($def->getType(), '\\'));

tests/DI/Compiler.generatedFactory.phpt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,17 @@ Assert::exception(function () {
311311
$builder->addDefinition('one')->setImplement('Bad6')->setFactory('Bad5');
312312
$builder->complete();
313313
}, Nette\InvalidStateException::class, 'Unused parameter $baz when implementing method Bad6::create().');
314+
315+
316+
317+
interface Bad7
318+
{
319+
public function get();
320+
}
321+
322+
Assert::exception(function () {
323+
$builder = new DI\ContainerBuilder;
324+
$builder->addDefinition('stdClass')->setFactory('stdClass');
325+
$builder->addDefinition('one')->setImplement('Bad7')->setClass('stdClass')->addSetup('method');
326+
$builder->complete();
327+
}, Nette\InvalidStateException::class, "Service accessor 'one' must have no setup.");

0 commit comments

Comments
 (0)