Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\DependencyInjection\Exception;
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * This exception is thrown when a non-existent parameter is used.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @author Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
18 */
|
Chris@0
|
19 class ParameterNotFoundException extends InvalidArgumentException
|
Chris@0
|
20 {
|
Chris@0
|
21 private $key;
|
Chris@0
|
22 private $sourceId;
|
Chris@0
|
23 private $sourceKey;
|
Chris@0
|
24 private $alternatives;
|
Chris@0
|
25 private $nonNestedAlternative;
|
Chris@0
|
26
|
Chris@0
|
27 /**
|
Chris@0
|
28 * @param string $key The requested parameter key
|
Chris@0
|
29 * @param string $sourceId The service id that references the non-existent parameter
|
Chris@0
|
30 * @param string $sourceKey The parameter key that references the non-existent parameter
|
Chris@0
|
31 * @param \Exception $previous The previous exception
|
Chris@0
|
32 * @param string[] $alternatives Some parameter name alternatives
|
Chris@0
|
33 * @param string|null $nonNestedAlternative The alternative parameter name when the user expected dot notation for nested parameters
|
Chris@0
|
34 */
|
Chris@17
|
35 public function __construct($key, $sourceId = null, $sourceKey = null, \Exception $previous = null, array $alternatives = [], $nonNestedAlternative = null)
|
Chris@0
|
36 {
|
Chris@0
|
37 $this->key = $key;
|
Chris@0
|
38 $this->sourceId = $sourceId;
|
Chris@0
|
39 $this->sourceKey = $sourceKey;
|
Chris@0
|
40 $this->alternatives = $alternatives;
|
Chris@0
|
41 $this->nonNestedAlternative = $nonNestedAlternative;
|
Chris@0
|
42
|
Chris@0
|
43 parent::__construct('', 0, $previous);
|
Chris@0
|
44
|
Chris@0
|
45 $this->updateRepr();
|
Chris@0
|
46 }
|
Chris@0
|
47
|
Chris@0
|
48 public function updateRepr()
|
Chris@0
|
49 {
|
Chris@0
|
50 if (null !== $this->sourceId) {
|
Chris@0
|
51 $this->message = sprintf('The service "%s" has a dependency on a non-existent parameter "%s".', $this->sourceId, $this->key);
|
Chris@0
|
52 } elseif (null !== $this->sourceKey) {
|
Chris@0
|
53 $this->message = sprintf('The parameter "%s" has a dependency on a non-existent parameter "%s".', $this->sourceKey, $this->key);
|
Chris@0
|
54 } else {
|
Chris@0
|
55 $this->message = sprintf('You have requested a non-existent parameter "%s".', $this->key);
|
Chris@0
|
56 }
|
Chris@0
|
57
|
Chris@0
|
58 if ($this->alternatives) {
|
Chris@17
|
59 if (1 == \count($this->alternatives)) {
|
Chris@0
|
60 $this->message .= ' Did you mean this: "';
|
Chris@0
|
61 } else {
|
Chris@0
|
62 $this->message .= ' Did you mean one of these: "';
|
Chris@0
|
63 }
|
Chris@0
|
64 $this->message .= implode('", "', $this->alternatives).'"?';
|
Chris@0
|
65 } elseif (null !== $this->nonNestedAlternative) {
|
Chris@0
|
66 $this->message .= ' You cannot access nested array items, do you want to inject "'.$this->nonNestedAlternative.'" instead?';
|
Chris@0
|
67 }
|
Chris@0
|
68 }
|
Chris@0
|
69
|
Chris@0
|
70 public function getKey()
|
Chris@0
|
71 {
|
Chris@0
|
72 return $this->key;
|
Chris@0
|
73 }
|
Chris@0
|
74
|
Chris@0
|
75 public function getSourceId()
|
Chris@0
|
76 {
|
Chris@0
|
77 return $this->sourceId;
|
Chris@0
|
78 }
|
Chris@0
|
79
|
Chris@0
|
80 public function getSourceKey()
|
Chris@0
|
81 {
|
Chris@0
|
82 return $this->sourceKey;
|
Chris@0
|
83 }
|
Chris@0
|
84
|
Chris@0
|
85 public function setSourceId($sourceId)
|
Chris@0
|
86 {
|
Chris@0
|
87 $this->sourceId = $sourceId;
|
Chris@0
|
88
|
Chris@0
|
89 $this->updateRepr();
|
Chris@0
|
90 }
|
Chris@0
|
91
|
Chris@0
|
92 public function setSourceKey($sourceKey)
|
Chris@0
|
93 {
|
Chris@0
|
94 $this->sourceKey = $sourceKey;
|
Chris@0
|
95
|
Chris@0
|
96 $this->updateRepr();
|
Chris@0
|
97 }
|
Chris@0
|
98 }
|