У меня есть следующий код внутри моего Clutch.php
entity
.
/**
* Set incubationTemp
*
* @param integer $incubationTemp
* @return Clutch
*/
public function setIncubationTemp($incubationTemp)
{
$this->incubationTemp = $incubationTemp;
if($incubationTemp > 77.5 && $incubationTemp < 82.5){
$estimatedHatchStart = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+60days');
$estimatedHatchEnd = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+70days');
}
else if($incubationTemp > 82.5 && $incubationTemp < 88.5) {
$estimatedHatchStart = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+45days');
$estimatedHatchEnd = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+55days');
}
else if($incubationTemp > 88.5 && $incubationTemp < 92.5) {
$estimatedHatchStart = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+35days');
$estimatedHatchEnd = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+45days');
} else {
// Throw an error here
}
$this->setEstimatedHatchStart($estimatedHatchStart);
$this->setEstimatedHatchEnd($estimatedHatchEnd);
return $this;
}
Это отлично работает, если переданное значение находится между значениями, которые вы можете видеть в инструкции if. То, что я хотел бы сделать, это заставить ошибку показать, что значение $incubationTemp
находится за пределами проверяемых значений. Каков наилучший способ достичь этого?
РЕДАКТИРОВАТЬ:
По Петру ответ. Это отлично работает:
use Symfony\Component\Validator\Constraints as Assert;
// ...
/**
* @var integer
*
* @ORM\Column(name="incubation_temp", type="integer")
* @Assert\Range(
* min = 78,
* max = 92,
* minMessage = "The fahrenheit value you have entered is not a suggested value for incubating leopard geckos. Please make sure the value is at least {{ limit }}°f.",
* maxMessage = "The fahrenheit value you have entered is not a suggested value for incubating leopard geckos. Please make sure the value is lower than {{ limit }}°f."
* )
*/
private $incubationTemp;
Вероятно, не будет "лучшего" способа, но возможны исключения:
class InvalidIncubationTemperatureException extends \DomainException {}
А потом
else {
throw new InvalidIncubationTemperatureException(
'Whatever message you want'
)
}
Когда вы говорите "показать" ошибку, которая может означать много вещей, но предположим, что вы находитесь в контексте контроллера
try {
$clutch = new Clutch();
$clutch->setIncubationTemp(0);
}
catch (InvalidIncubationTemperatureException $e)
{
$this->addFlash('clutch_errors', $e->getMessage())
}
Тогда в твоей веточке
{% set errors = app.session.flashbag.get('clutch_errors') %}
{% if errors|length %}
{% for message in errors %}
{{ message}}
{% endfor %}
{% endif %}
Или какой бы механизм вы ни пожелали.
Однако лучший способ справиться с этим может заключаться в проверке
class InvalidIncubationTemperatureException extends \DomainException {}
входить в мою сущность?