Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\DependencyInjection\Exception; Chris@0: Chris@0: /** Chris@0: * This exception is thrown when a non-existent parameter is used. Chris@0: * Chris@0: * @author Fabien Potencier Chris@0: */ Chris@0: class ParameterNotFoundException extends InvalidArgumentException Chris@0: { Chris@0: private $key; Chris@0: private $sourceId; Chris@0: private $sourceKey; Chris@0: private $alternatives; Chris@0: private $nonNestedAlternative; Chris@0: Chris@0: /** Chris@0: * @param string $key The requested parameter key Chris@0: * @param string $sourceId The service id that references the non-existent parameter Chris@0: * @param string $sourceKey The parameter key that references the non-existent parameter Chris@0: * @param \Exception $previous The previous exception Chris@0: * @param string[] $alternatives Some parameter name alternatives Chris@0: * @param string|null $nonNestedAlternative The alternative parameter name when the user expected dot notation for nested parameters Chris@0: */ Chris@17: public function __construct($key, $sourceId = null, $sourceKey = null, \Exception $previous = null, array $alternatives = [], $nonNestedAlternative = null) Chris@0: { Chris@0: $this->key = $key; Chris@0: $this->sourceId = $sourceId; Chris@0: $this->sourceKey = $sourceKey; Chris@0: $this->alternatives = $alternatives; Chris@0: $this->nonNestedAlternative = $nonNestedAlternative; Chris@0: Chris@0: parent::__construct('', 0, $previous); Chris@0: Chris@0: $this->updateRepr(); Chris@0: } Chris@0: Chris@0: public function updateRepr() Chris@0: { Chris@0: if (null !== $this->sourceId) { Chris@0: $this->message = sprintf('The service "%s" has a dependency on a non-existent parameter "%s".', $this->sourceId, $this->key); Chris@0: } elseif (null !== $this->sourceKey) { Chris@0: $this->message = sprintf('The parameter "%s" has a dependency on a non-existent parameter "%s".', $this->sourceKey, $this->key); Chris@0: } else { Chris@0: $this->message = sprintf('You have requested a non-existent parameter "%s".', $this->key); Chris@0: } Chris@0: Chris@0: if ($this->alternatives) { Chris@17: if (1 == \count($this->alternatives)) { Chris@0: $this->message .= ' Did you mean this: "'; Chris@0: } else { Chris@0: $this->message .= ' Did you mean one of these: "'; Chris@0: } Chris@0: $this->message .= implode('", "', $this->alternatives).'"?'; Chris@0: } elseif (null !== $this->nonNestedAlternative) { Chris@0: $this->message .= ' You cannot access nested array items, do you want to inject "'.$this->nonNestedAlternative.'" instead?'; Chris@0: } Chris@0: } Chris@0: Chris@0: public function getKey() Chris@0: { Chris@0: return $this->key; Chris@0: } Chris@0: Chris@0: public function getSourceId() Chris@0: { Chris@0: return $this->sourceId; Chris@0: } Chris@0: Chris@0: public function getSourceKey() Chris@0: { Chris@0: return $this->sourceKey; Chris@0: } Chris@0: Chris@0: public function setSourceId($sourceId) Chris@0: { Chris@0: $this->sourceId = $sourceId; Chris@0: Chris@0: $this->updateRepr(); Chris@0: } Chris@0: Chris@0: public function setSourceKey($sourceKey) Chris@0: { Chris@0: $this->sourceKey = $sourceKey; Chris@0: Chris@0: $this->updateRepr(); Chris@0: } Chris@0: }